aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2009-12-17 21:24:33 -0500
committerEric Paris <eparis@redhat.com>2010-07-28 09:59:00 -0400
commit33af5e32e0bb73c704b5e156f4411cdb53e6cc59 (patch)
treec427a66b81498c14598ed4161e3646930a805043
parent90b1e7a57880fb66437ab7db39e1e65ca0372822 (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.c6
-rw-r--r--include/linux/fsnotify_backend.h3
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
193void 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
373extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt); 374extern 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 */
375extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old); 376extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old);
377/* set the ignored_mask of a mark */
378extern 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 */
377extern void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask); 380extern 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 */