Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2612abb5 authored by Eric Paris's avatar Eric Paris
Browse files

fsnotify: cleanup should_send_event



The change to use srcu and walk the object list rather than the global
fsnotify_group list means that should_send_event is no longer needed for a
number of groups and can be simplified for others.  Do that.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 0215054f
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -129,20 +129,11 @@ static bool dnotify_should_send_event(struct fsnotify_group *group,
				      struct fsnotify_mark *mark, __u32 mask,
				      void *data, int data_type)
{
	bool send;

	/* !dir_notify_enable should never get here, don't waste time checking
	if (!dir_notify_enable)
		return 0; */

	/* not a dir, dnotify doesn't care */
	if (!S_ISDIR(inode->i_mode))
		return false;

	mask = (mask & ~FS_EVENT_ON_CHILD);
	send = (mask & mark->mask);

	return send;
	return true;
}

static void dnotify_free_mark(struct fsnotify_mark *fsn_mark)
+8 −15
Original line number Diff line number Diff line
@@ -185,22 +185,15 @@ static bool should_send_inode_event(struct fsnotify_group *group,
	pr_debug("%s: group=%p inode=%p mark=%p mask=%x\n",
		 __func__, group, inode, mark, mask);

	/* if the event is for a child and this inode doesn't care about
	 * events on the child, don't send it! */
	if ((mask & FS_EVENT_ON_CHILD) &&
	    !(mark->mask & FS_EVENT_ON_CHILD)) {
		mask = 0;
	} else {
	/*
		 * We care about children, but do we care about this particular
		 * type of event?
	 * if the event is for a child and this inode doesn't care about
	 * events on the child, don't send it!
	 */
		mask &= ~FS_EVENT_ON_CHILD;
		mask &= mark->mask;
		mask &= ~mark->ignored_mask;
	}

	return mask;
	if ((mask & FS_EVENT_ON_CHILD) &&
	    !(mark->mask & FS_EVENT_ON_CHILD))
		return false;
	else
		return true;
}

static bool fanotify_should_send_event(struct fsnotify_group *group, struct inode *to_tell,
+2 −2
Original line number Diff line number Diff line
@@ -180,8 +180,8 @@ static int send_to_group(struct fsnotify_group *group, struct inode *to_tell,
		 " data_is=%d cookie=%d event=%p\n", __func__, group, to_tell,
		 mnt, mark, mask, data, data_is, cookie, *event);

	if (!group->ops->should_send_event(group, to_tell, mnt, mark, mask,
					   data, data_is))
	if (group->ops->should_send_event(group, to_tell, mnt, mark, mask,
					  data, data_is) == false)
		return 0;
	if (!*event) {
		*event = fsnotify_create_event(to_tell, mask, data,
+3 −11
Original line number Diff line number Diff line
@@ -142,23 +142,15 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
				      struct vfsmount *mnt, struct fsnotify_mark *mark,
				      __u32 mask, void *data, int data_type)
{
	bool send;

	pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
		 __func__, group, inode, mask, data, data_type);

	mask = (mask & ~FS_EVENT_ON_CHILD);
	send = (mark->mask & mask);

	if (send && (mark->mask & FS_EXCL_UNLINK) &&
	if ((mark->mask & FS_EXCL_UNLINK) &&
	    (data_type == FSNOTIFY_EVENT_FILE)) {
		struct file *file  = data;

		if (d_unlinked(file->f_path.dentry))
			send = false;
			return false;
	}

	return send;
	return true;
}

/*
+1 −1
Original line number Diff line number Diff line
@@ -923,7 +923,7 @@ static bool audit_tree_send_event(struct fsnotify_group *group, struct inode *in
				  struct vfsmount *mnt, struct fsnotify_mark *mark,
				  __u32 mask, void *data, int data_type)
{
	return 0;
	return false;
}

static const struct fsnotify_ops audit_tree_ops = {
Loading