Lines Matching refs:mark

99 void fsnotify_get_mark(struct fsnotify_mark *mark)  in fsnotify_get_mark()  argument
101 atomic_inc(&mark->refcnt); in fsnotify_get_mark()
104 void fsnotify_put_mark(struct fsnotify_mark *mark) in fsnotify_put_mark() argument
106 if (atomic_dec_and_test(&mark->refcnt)) { in fsnotify_put_mark()
107 if (mark->group) in fsnotify_put_mark()
108 fsnotify_put_group(mark->group); in fsnotify_put_mark()
109 mark->free_mark(mark); in fsnotify_put_mark()
117 struct fsnotify_mark *mark; in fsnotify_recalc_mask() local
119 hlist_for_each_entry(mark, head, obj_list) in fsnotify_recalc_mask()
120 new_mask |= mark->mask; in fsnotify_recalc_mask()
129 void fsnotify_destroy_mark_locked(struct fsnotify_mark *mark, in fsnotify_destroy_mark_locked() argument
136 spin_lock(&mark->lock); in fsnotify_destroy_mark_locked()
139 if (!(mark->flags & FSNOTIFY_MARK_FLAG_ALIVE)) { in fsnotify_destroy_mark_locked()
140 spin_unlock(&mark->lock); in fsnotify_destroy_mark_locked()
144 mark->flags &= ~FSNOTIFY_MARK_FLAG_ALIVE; in fsnotify_destroy_mark_locked()
146 if (mark->flags & FSNOTIFY_MARK_FLAG_INODE) { in fsnotify_destroy_mark_locked()
147 inode = mark->inode; in fsnotify_destroy_mark_locked()
148 fsnotify_destroy_inode_mark(mark); in fsnotify_destroy_mark_locked()
149 } else if (mark->flags & FSNOTIFY_MARK_FLAG_VFSMOUNT) in fsnotify_destroy_mark_locked()
150 fsnotify_destroy_vfsmount_mark(mark); in fsnotify_destroy_mark_locked()
154 list_del_init(&mark->g_list); in fsnotify_destroy_mark_locked()
156 spin_unlock(&mark->lock); in fsnotify_destroy_mark_locked()
158 if (inode && (mark->flags & FSNOTIFY_MARK_FLAG_OBJECT_PINNED)) in fsnotify_destroy_mark_locked()
164 list_add(&mark->g_list, &destroy_list); in fsnotify_destroy_mark_locked()
179 group->ops->freeing_mark(mark, group); in fsnotify_destroy_mark_locked()
198 void fsnotify_destroy_mark(struct fsnotify_mark *mark, in fsnotify_destroy_mark() argument
202 fsnotify_destroy_mark_locked(mark, group); in fsnotify_destroy_mark()
212 struct fsnotify_mark *mark, *lmark; in fsnotify_destroy_marks() local
215 list_for_each_entry_safe(mark, lmark, to_free, free_list) { in fsnotify_destroy_marks()
216 spin_lock(&mark->lock); in fsnotify_destroy_marks()
217 fsnotify_get_group(mark->group); in fsnotify_destroy_marks()
218 group = mark->group; in fsnotify_destroy_marks()
219 spin_unlock(&mark->lock); in fsnotify_destroy_marks()
221 fsnotify_destroy_mark(mark, group); in fsnotify_destroy_marks()
222 fsnotify_put_mark(mark); in fsnotify_destroy_marks()
227 void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) in fsnotify_set_mark_mask_locked() argument
229 assert_spin_locked(&mark->lock); in fsnotify_set_mark_mask_locked()
231 mark->mask = mask; in fsnotify_set_mark_mask_locked()
233 if (mark->flags & FSNOTIFY_MARK_FLAG_INODE) in fsnotify_set_mark_mask_locked()
234 fsnotify_set_inode_mark_mask_locked(mark, mask); in fsnotify_set_mark_mask_locked()
237 void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask) in fsnotify_set_mark_ignored_mask_locked() argument
239 assert_spin_locked(&mark->lock); in fsnotify_set_mark_ignored_mask_locked()
241 mark->ignored_mask = mask; in fsnotify_set_mark_ignored_mask_locked()
281 int fsnotify_add_mark_list(struct hlist_head *head, struct fsnotify_mark *mark, in fsnotify_add_mark_list() argument
289 hlist_add_head_rcu(&mark->obj_list, head); in fsnotify_add_mark_list()
297 if ((lmark->group == mark->group) && !allow_dups) in fsnotify_add_mark_list()
300 cmp = fsnotify_compare_groups(lmark->group, mark->group); in fsnotify_add_mark_list()
302 hlist_add_before_rcu(&mark->obj_list, &lmark->obj_list); in fsnotify_add_mark_list()
309 hlist_add_behind_rcu(&mark->obj_list, &last->obj_list); in fsnotify_add_mark_list()
318 int fsnotify_add_mark_locked(struct fsnotify_mark *mark, in fsnotify_add_mark_locked() argument
334 spin_lock(&mark->lock); in fsnotify_add_mark_locked()
335 mark->flags |= FSNOTIFY_MARK_FLAG_ALIVE; in fsnotify_add_mark_locked()
338 mark->group = group; in fsnotify_add_mark_locked()
339 list_add(&mark->g_list, &group->marks_list); in fsnotify_add_mark_locked()
341 fsnotify_get_mark(mark); /* for i_list and g_list */ in fsnotify_add_mark_locked()
344 ret = fsnotify_add_inode_mark(mark, group, inode, allow_dups); in fsnotify_add_mark_locked()
348 ret = fsnotify_add_vfsmount_mark(mark, group, mnt, allow_dups); in fsnotify_add_mark_locked()
356 fsnotify_set_mark_mask_locked(mark, mark->mask); in fsnotify_add_mark_locked()
357 spin_unlock(&mark->lock); in fsnotify_add_mark_locked()
364 mark->flags &= ~FSNOTIFY_MARK_FLAG_ALIVE; in fsnotify_add_mark_locked()
365 list_del_init(&mark->g_list); in fsnotify_add_mark_locked()
367 mark->group = NULL; in fsnotify_add_mark_locked()
370 spin_unlock(&mark->lock); in fsnotify_add_mark_locked()
373 list_add(&mark->g_list, &destroy_list); in fsnotify_add_mark_locked()
380 int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group, in fsnotify_add_mark() argument
385 ret = fsnotify_add_mark_locked(mark, group, inode, mnt, allow_dups); in fsnotify_add_mark()
397 struct fsnotify_mark *mark; in fsnotify_find_mark() local
399 hlist_for_each_entry(mark, head, obj_list) { in fsnotify_find_mark()
400 if (mark->group == group) { in fsnotify_find_mark()
401 fsnotify_get_mark(mark); in fsnotify_find_mark()
402 return mark; in fsnotify_find_mark()
414 struct fsnotify_mark *lmark, *mark; in fsnotify_clear_marks_by_group_flags() local
427 list_for_each_entry_safe(mark, lmark, &group->marks_list, g_list) { in fsnotify_clear_marks_by_group_flags()
428 if (mark->flags & flags) in fsnotify_clear_marks_by_group_flags()
429 list_move(&mark->g_list, &to_free); in fsnotify_clear_marks_by_group_flags()
439 mark = list_first_entry(&to_free, struct fsnotify_mark, g_list); in fsnotify_clear_marks_by_group_flags()
440 fsnotify_get_mark(mark); in fsnotify_clear_marks_by_group_flags()
441 fsnotify_destroy_mark_locked(mark, group); in fsnotify_clear_marks_by_group_flags()
443 fsnotify_put_mark(mark); in fsnotify_clear_marks_by_group_flags()
470 void fsnotify_init_mark(struct fsnotify_mark *mark, in fsnotify_init_mark() argument
471 void (*free_mark)(struct fsnotify_mark *mark)) in fsnotify_init_mark() argument
473 memset(mark, 0, sizeof(*mark)); in fsnotify_init_mark()
474 spin_lock_init(&mark->lock); in fsnotify_init_mark()
475 atomic_set(&mark->refcnt, 1); in fsnotify_init_mark()
476 mark->free_mark = free_mark; in fsnotify_init_mark()
481 struct fsnotify_mark *mark, *next; in fsnotify_mark_destroy() local
492 list_for_each_entry_safe(mark, next, &private_destroy_list, g_list) { in fsnotify_mark_destroy()
493 list_del_init(&mark->g_list); in fsnotify_mark_destroy()
494 fsnotify_put_mark(mark); in fsnotify_mark_destroy()