diff options
author | Eric Paris <eparis@redhat.com> | 2009-12-17 21:24:33 -0500 |
---|---|---|
committer | Eric Paris <eparis@redhat.com> | 2010-07-28 09:59:00 -0400 |
commit | 33af5e32e0bb73c704b5e156f4411cdb53e6cc59 (patch) | |
tree | c427a66b81498c14598ed4161e3646930a805043 | |
parent | 90b1e7a57880fb66437ab7db39e1e65ca0372822 (diff) |
fsnotify: ignored_mask - excluding notification
The ignored_mask is a new mask which is part of fsnotify marks. A group's
should_send_event() function can use the ignored mask to determine that
certain events are not of interest. In particular if a group registers a
mask including FS_OPEN on a vfsmount they could add FS_OPEN to the
ignored_mask for individual inodes and not send open events for those
inodes.
Signed-off-by: Eric Paris <eparis@redhat.com>
-rw-r--r-- | fs/notify/mark.c | 6 | ||||
-rw-r--r-- | include/linux/fsnotify_backend.h | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/fs/notify/mark.c b/fs/notify/mark.c index 0ebc3fd7089b..cb1d822f227f 100644 --- a/fs/notify/mark.c +++ b/fs/notify/mark.c | |||
@@ -190,6 +190,12 @@ void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) | |||
190 | fsnotify_set_inode_mark_mask_locked(mark, mask); | 190 | fsnotify_set_inode_mark_mask_locked(mark, mask); |
191 | } | 191 | } |
192 | 192 | ||
193 | void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask) | ||
194 | { | ||
195 | assert_spin_locked(&mark->lock); | ||
196 | |||
197 | mark->ignored_mask = mask; | ||
198 | } | ||
193 | 199 | ||
194 | /* | 200 | /* |
195 | * Attach an initialized mark to a given group and fs object. | 201 | * Attach an initialized mark to a given group and fs object. |
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 489c881ed4ec..018416ec5ce4 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h | |||
@@ -266,6 +266,7 @@ struct fsnotify_mark { | |||
266 | struct fsnotify_inode_mark i; | 266 | struct fsnotify_inode_mark i; |
267 | struct fsnotify_vfsmount_mark m; | 267 | struct fsnotify_vfsmount_mark m; |
268 | }; | 268 | }; |
269 | __u32 ignored_mask; /* events types to ignore */ | ||
269 | struct list_head free_g_list; /* tmp list used when freeing this mark */ | 270 | struct list_head free_g_list; /* tmp list used when freeing this mark */ |
270 | #define FSNOTIFY_MARK_FLAG_INODE 0x01 | 271 | #define FSNOTIFY_MARK_FLAG_INODE 0x01 |
271 | #define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02 | 272 | #define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02 |
@@ -373,6 +374,8 @@ extern struct fsnotify_mark *fsnotify_find_inode_mark(struct fsnotify_group *gro | |||
373 | extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt); | 374 | extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt); |
374 | /* copy the values from old into new */ | 375 | /* copy the values from old into new */ |
375 | extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old); | 376 | extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old); |
377 | /* set the ignored_mask of a mark */ | ||
378 | extern void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask); | ||
376 | /* set the mask of a mark (might pin the object into memory */ | 379 | /* set the mask of a mark (might pin the object into memory */ |
377 | extern void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask); | 380 | extern void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask); |
378 | /* attach the mark to both the group and the inode */ | 381 | /* attach the mark to both the group and the inode */ |