Commit 83c4c4b0 authored by Jan Kara's avatar Jan Kara Committed by Linus Torvalds

fsnotify: remove .should_send_event callback

After removing event structure creation from the generic layer there is
no reason for separate .should_send_event and .handle_event callbacks.
So just remove the first one.
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: Eric Paris <eparis@parisplace.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7053aee2
...@@ -94,6 +94,10 @@ static int dnotify_handle_event(struct fsnotify_group *group, ...@@ -94,6 +94,10 @@ static int dnotify_handle_event(struct fsnotify_group *group,
struct fown_struct *fown; struct fown_struct *fown;
__u32 test_mask = mask & ~FS_EVENT_ON_CHILD; __u32 test_mask = mask & ~FS_EVENT_ON_CHILD;
/* not a dir, dnotify doesn't care */
if (!S_ISDIR(inode->i_mode))
return 0;
BUG_ON(vfsmount_mark); BUG_ON(vfsmount_mark);
dn_mark = container_of(inode_mark, struct dnotify_mark, fsn_mark); dn_mark = container_of(inode_mark, struct dnotify_mark, fsn_mark);
...@@ -121,23 +125,6 @@ static int dnotify_handle_event(struct fsnotify_group *group, ...@@ -121,23 +125,6 @@ static int dnotify_handle_event(struct fsnotify_group *group,
return 0; return 0;
} }
/*
* Given an inode and mask determine if dnotify would be interested in sending
* userspace notification for that pair.
*/
static bool dnotify_should_send_event(struct fsnotify_group *group,
struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmount_mark,
__u32 mask, void *data, int data_type)
{
/* not a dir, dnotify doesn't care */
if (!S_ISDIR(inode->i_mode))
return false;
return true;
}
static void dnotify_free_mark(struct fsnotify_mark *fsn_mark) static void dnotify_free_mark(struct fsnotify_mark *fsn_mark)
{ {
struct dnotify_mark *dn_mark = container_of(fsn_mark, struct dnotify_mark *dn_mark = container_of(fsn_mark,
...@@ -151,7 +138,6 @@ static void dnotify_free_mark(struct fsnotify_mark *fsn_mark) ...@@ -151,7 +138,6 @@ static void dnotify_free_mark(struct fsnotify_mark *fsn_mark)
static struct fsnotify_ops dnotify_fsnotify_ops = { static struct fsnotify_ops dnotify_fsnotify_ops = {
.handle_event = dnotify_handle_event, .handle_event = dnotify_handle_event,
.should_send_event = dnotify_should_send_event,
.free_group_priv = NULL, .free_group_priv = NULL,
.freeing_mark = NULL, .freeing_mark = NULL,
.free_event = NULL, .free_event = NULL,
......
...@@ -88,18 +88,17 @@ static int fanotify_get_response_from_access(struct fsnotify_group *group, ...@@ -88,18 +88,17 @@ static int fanotify_get_response_from_access(struct fsnotify_group *group,
} }
#endif #endif
static bool fanotify_should_send_event(struct fsnotify_group *group, static bool fanotify_should_send_event(struct fsnotify_mark *inode_mark,
struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmnt_mark, struct fsnotify_mark *vfsmnt_mark,
__u32 event_mask, void *data, int data_type) u32 event_mask,
void *data, int data_type)
{ {
__u32 marks_mask, marks_ignored_mask; __u32 marks_mask, marks_ignored_mask;
struct path *path = data; struct path *path = data;
pr_debug("%s: group=%p inode=%p inode_mark=%p vfsmnt_mark=%p " pr_debug("%s: inode_mark=%p vfsmnt_mark=%p mask=%x data=%p"
"mask=%x data=%p data_type=%d\n", __func__, group, inode, " data_type=%d\n", __func__, inode_mark, vfsmnt_mark,
inode_mark, vfsmnt_mark, event_mask, data, data_type); event_mask, data, data_type);
/* if we don't have enough info to send an event to userspace say no */ /* if we don't have enough info to send an event to userspace say no */
if (data_type != FSNOTIFY_EVENT_PATH) if (data_type != FSNOTIFY_EVENT_PATH)
...@@ -163,6 +162,10 @@ static int fanotify_handle_event(struct fsnotify_group *group, ...@@ -163,6 +162,10 @@ static int fanotify_handle_event(struct fsnotify_group *group,
BUILD_BUG_ON(FAN_ACCESS_PERM != FS_ACCESS_PERM); BUILD_BUG_ON(FAN_ACCESS_PERM != FS_ACCESS_PERM);
BUILD_BUG_ON(FAN_ONDIR != FS_ISDIR); BUILD_BUG_ON(FAN_ONDIR != FS_ISDIR);
if (!fanotify_should_send_event(inode_mark, fanotify_mark, mask, data,
data_type))
return 0;
pr_debug("%s: group=%p inode=%p mask=%x\n", __func__, group, inode, pr_debug("%s: group=%p inode=%p mask=%x\n", __func__, group, inode,
mask); mask);
...@@ -225,7 +228,6 @@ static void fanotify_free_event(struct fsnotify_event *fsn_event) ...@@ -225,7 +228,6 @@ static void fanotify_free_event(struct fsnotify_event *fsn_event)
const struct fsnotify_ops fanotify_fsnotify_ops = { const struct fsnotify_ops fanotify_fsnotify_ops = {
.handle_event = fanotify_handle_event, .handle_event = fanotify_handle_event,
.should_send_event = fanotify_should_send_event,
.free_group_priv = fanotify_free_group_priv, .free_group_priv = fanotify_free_group_priv,
.free_event = fanotify_free_event, .free_event = fanotify_free_event,
.freeing_mark = NULL, .freeing_mark = NULL,
......
...@@ -177,11 +177,6 @@ static int send_to_group(struct inode *to_tell, ...@@ -177,11 +177,6 @@ static int send_to_group(struct inode *to_tell,
if (!inode_test_mask && !vfsmount_test_mask) if (!inode_test_mask && !vfsmount_test_mask)
return 0; return 0;
if (group->ops->should_send_event(group, to_tell, inode_mark,
vfsmount_mark, mask, data,
data_is) == false)
return 0;
return group->ops->handle_event(group, to_tell, inode_mark, return group->ops->handle_event(group, to_tell, inode_mark,
vfsmount_mark, mask, data, data_is, vfsmount_mark, mask, data, data_is,
file_name); file_name);
......
...@@ -81,6 +81,13 @@ int inotify_handle_event(struct fsnotify_group *group, ...@@ -81,6 +81,13 @@ int inotify_handle_event(struct fsnotify_group *group,
BUG_ON(vfsmount_mark); BUG_ON(vfsmount_mark);
if ((inode_mark->mask & FS_EXCL_UNLINK) &&
(data_type == FSNOTIFY_EVENT_PATH)) {
struct path *path = data;
if (d_unlinked(path->dentry))
return 0;
}
if (file_name) { if (file_name) {
len = strlen(file_name); len = strlen(file_name);
alloc_len += len + 1; alloc_len += len + 1;
...@@ -122,22 +129,6 @@ static void inotify_freeing_mark(struct fsnotify_mark *fsn_mark, struct fsnotify ...@@ -122,22 +129,6 @@ static void inotify_freeing_mark(struct fsnotify_mark *fsn_mark, struct fsnotify
inotify_ignored_and_remove_idr(fsn_mark, group); inotify_ignored_and_remove_idr(fsn_mark, group);
} }
static bool inotify_should_send_event(struct fsnotify_group *group, struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmount_mark,
__u32 mask, void *data, int data_type)
{
if ((inode_mark->mask & FS_EXCL_UNLINK) &&
(data_type == FSNOTIFY_EVENT_PATH)) {
struct path *path = data;
if (d_unlinked(path->dentry))
return false;
}
return true;
}
/* /*
* This is NEVER supposed to be called. Inotify marks should either have been * This is NEVER supposed to be called. Inotify marks should either have been
* removed from the idr when the watch was removed or in the * removed from the idr when the watch was removed or in the
...@@ -189,7 +180,6 @@ static void inotify_free_event(struct fsnotify_event *fsn_event) ...@@ -189,7 +180,6 @@ static void inotify_free_event(struct fsnotify_event *fsn_event)
const struct fsnotify_ops inotify_fsnotify_ops = { const struct fsnotify_ops inotify_fsnotify_ops = {
.handle_event = inotify_handle_event, .handle_event = inotify_handle_event,
.should_send_event = inotify_should_send_event,
.free_group_priv = inotify_free_group_priv, .free_group_priv = inotify_free_group_priv,
.free_event = inotify_free_event, .free_event = inotify_free_event,
.freeing_mark = inotify_freeing_mark, .freeing_mark = inotify_freeing_mark,
......
...@@ -94,10 +94,6 @@ struct fsnotify_fname; ...@@ -94,10 +94,6 @@ struct fsnotify_fname;
* userspace messages that marks have been removed. * userspace messages that marks have been removed.
*/ */
struct fsnotify_ops { struct fsnotify_ops {
bool (*should_send_event)(struct fsnotify_group *group, struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmount_mark,
__u32 mask, void *data, int data_type);
int (*handle_event)(struct fsnotify_group *group, int (*handle_event)(struct fsnotify_group *group,
struct inode *inode, struct inode *inode,
struct fsnotify_mark *inode_mark, struct fsnotify_mark *inode_mark,
......
...@@ -918,8 +918,7 @@ static int audit_tree_handle_event(struct fsnotify_group *group, ...@@ -918,8 +918,7 @@ static int audit_tree_handle_event(struct fsnotify_group *group,
u32 mask, void *data, int data_type, u32 mask, void *data, int data_type,
const unsigned char *file_name) const unsigned char *file_name)
{ {
BUG(); return 0;
return -EOPNOTSUPP;
} }
static void audit_tree_freeing_mark(struct fsnotify_mark *entry, struct fsnotify_group *group) static void audit_tree_freeing_mark(struct fsnotify_mark *entry, struct fsnotify_group *group)
...@@ -935,17 +934,8 @@ static void audit_tree_freeing_mark(struct fsnotify_mark *entry, struct fsnotify ...@@ -935,17 +934,8 @@ static void audit_tree_freeing_mark(struct fsnotify_mark *entry, struct fsnotify
BUG_ON(atomic_read(&entry->refcnt) < 1); BUG_ON(atomic_read(&entry->refcnt) < 1);
} }
static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmount_mark,
__u32 mask, void *data, int data_type)
{
return false;
}
static const struct fsnotify_ops audit_tree_ops = { static const struct fsnotify_ops audit_tree_ops = {
.handle_event = audit_tree_handle_event, .handle_event = audit_tree_handle_event,
.should_send_event = audit_tree_send_event,
.free_group_priv = NULL, .free_group_priv = NULL,
.free_event = NULL, .free_event = NULL,
.freeing_mark = audit_tree_freeing_mark, .freeing_mark = audit_tree_freeing_mark,
......
...@@ -465,14 +465,6 @@ void audit_remove_watch_rule(struct audit_krule *krule) ...@@ -465,14 +465,6 @@ void audit_remove_watch_rule(struct audit_krule *krule)
} }
} }
static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode,
struct fsnotify_mark *inode_mark,
struct fsnotify_mark *vfsmount_mark,
__u32 mask, void *data, int data_type)
{
return true;
}
/* Update watch data in audit rules based on fsnotify events. */ /* Update watch data in audit rules based on fsnotify events. */
static int audit_watch_handle_event(struct fsnotify_group *group, static int audit_watch_handle_event(struct fsnotify_group *group,
struct inode *to_tell, struct inode *to_tell,
...@@ -512,7 +504,6 @@ static int audit_watch_handle_event(struct fsnotify_group *group, ...@@ -512,7 +504,6 @@ static int audit_watch_handle_event(struct fsnotify_group *group,
} }
static const struct fsnotify_ops audit_watch_fsnotify_ops = { static const struct fsnotify_ops audit_watch_fsnotify_ops = {
.should_send_event = audit_watch_should_send_event,
.handle_event = audit_watch_handle_event, .handle_event = audit_watch_handle_event,
.free_group_priv = NULL, .free_group_priv = NULL,
.freeing_mark = NULL, .freeing_mark = NULL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment