Skip to content

Commit 3dca1a7

Browse files
amir73iljankara
authored andcommitted
fsnotify: generalize send_to_group()
Use fsnotify_foreach_obj_type macros to generalize the code that filters events by marks mask and ignored_mask. This is going to be used for adding mark of super block object type. Signed-off-by: Amir Goldstein <[email protected]> Signed-off-by: Jan Kara <[email protected]>
1 parent 47d9c7c commit 3dca1a7

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

fs/notify/fsnotify.c

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -189,46 +189,44 @@ static int send_to_group(struct inode *to_tell,
189189
const unsigned char *file_name,
190190
struct fsnotify_iter_info *iter_info)
191191
{
192-
struct fsnotify_mark *inode_mark = fsnotify_iter_inode_mark(iter_info);
193-
struct fsnotify_mark *vfsmount_mark = fsnotify_iter_vfsmount_mark(iter_info);
194192
struct fsnotify_group *group = NULL;
195193
__u32 test_mask = (mask & ~FS_EVENT_ON_CHILD);
196194
__u32 marks_mask = 0;
197195
__u32 marks_ignored_mask = 0;
196+
struct fsnotify_mark *mark;
197+
int type;
198198

199199
if (WARN_ON(!iter_info->report_mask))
200200
return 0;
201201

202202
/* clear ignored on inode modification */
203203
if (mask & FS_MODIFY) {
204-
if (inode_mark &&
205-
!(inode_mark->flags & FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY))
206-
inode_mark->ignored_mask = 0;
207-
if (vfsmount_mark &&
208-
!(vfsmount_mark->flags & FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY))
209-
vfsmount_mark->ignored_mask = 0;
210-
}
211-
212-
/* does the inode mark tell us to do something? */
213-
if (inode_mark) {
214-
group = inode_mark->group;
215-
marks_mask |= inode_mark->mask;
216-
marks_ignored_mask |= inode_mark->ignored_mask;
204+
fsnotify_foreach_obj_type(type) {
205+
if (!fsnotify_iter_should_report_type(iter_info, type))
206+
continue;
207+
mark = iter_info->marks[type];
208+
if (mark &&
209+
!(mark->flags & FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY))
210+
mark->ignored_mask = 0;
211+
}
217212
}
218213

219-
/* does the vfsmount_mark tell us to do something? */
220-
if (vfsmount_mark) {
221-
group = vfsmount_mark->group;
222-
marks_mask |= vfsmount_mark->mask;
223-
marks_ignored_mask |= vfsmount_mark->ignored_mask;
214+
fsnotify_foreach_obj_type(type) {
215+
if (!fsnotify_iter_should_report_type(iter_info, type))
216+
continue;
217+
mark = iter_info->marks[type];
218+
/* does the object mark tell us to do something? */
219+
if (mark) {
220+
group = mark->group;
221+
marks_mask |= mark->mask;
222+
marks_ignored_mask |= mark->ignored_mask;
223+
}
224224
}
225225

226-
pr_debug("%s: group=%p to_tell=%p mask=%x inode_mark=%p"
227-
" vfsmount_mark=%p marks_mask=%x marks_ignored_mask=%x"
226+
pr_debug("%s: group=%p to_tell=%p mask=%x marks_mask=%x marks_ignored_mask=%x"
228227
" data=%p data_is=%d cookie=%d\n",
229-
__func__, group, to_tell, mask, inode_mark, vfsmount_mark,
230-
marks_mask, marks_ignored_mask, data,
231-
data_is, cookie);
228+
__func__, group, to_tell, mask, marks_mask, marks_ignored_mask,
229+
data, data_is, cookie);
232230

233231
if (!(test_mask & marks_mask & ~marks_ignored_mask))
234232
return 0;

0 commit comments

Comments
 (0)