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>
This commit is contained in:
Родитель
90b1e7a578
Коммит
33af5e32e0
|
@ -190,6 +190,12 @@ void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask)
|
||||||
fsnotify_set_inode_mark_mask_locked(mark, mask);
|
fsnotify_set_inode_mark_mask_locked(mark, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask)
|
||||||
|
{
|
||||||
|
assert_spin_locked(&mark->lock);
|
||||||
|
|
||||||
|
mark->ignored_mask = mask;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attach an initialized mark to a given group and fs object.
|
* Attach an initialized mark to a given group and fs object.
|
||||||
|
|
|
@ -266,6 +266,7 @@ struct fsnotify_mark {
|
||||||
struct fsnotify_inode_mark i;
|
struct fsnotify_inode_mark i;
|
||||||
struct fsnotify_vfsmount_mark m;
|
struct fsnotify_vfsmount_mark m;
|
||||||
};
|
};
|
||||||
|
__u32 ignored_mask; /* events types to ignore */
|
||||||
struct list_head free_g_list; /* tmp list used when freeing this mark */
|
struct list_head free_g_list; /* tmp list used when freeing this mark */
|
||||||
#define FSNOTIFY_MARK_FLAG_INODE 0x01
|
#define FSNOTIFY_MARK_FLAG_INODE 0x01
|
||||||
#define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02
|
#define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02
|
||||||
|
@ -373,6 +374,8 @@ extern struct fsnotify_mark *fsnotify_find_inode_mark(struct fsnotify_group *gro
|
||||||
extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt);
|
extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt);
|
||||||
/* copy the values from old into new */
|
/* copy the values from old into new */
|
||||||
extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old);
|
extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old);
|
||||||
|
/* set the ignored_mask of a mark */
|
||||||
|
extern void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask);
|
||||||
/* set the mask of a mark (might pin the object into memory */
|
/* set the mask of a mark (might pin the object into memory */
|
||||||
extern void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask);
|
extern void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask);
|
||||||
/* attach the mark to both the group and the inode */
|
/* attach the mark to both the group and the inode */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче