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

Commit 7f6b6117 authored by Eric Paris's avatar Eric Paris
Browse files

inotify: use the mark in handler functions



inotify now gets a mark in the should_send_event and handle_event
functions.  Rather than look up the mark themselves inotify should just use
the mark it was handed.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 3a9b16b4
Loading
Loading
Loading
Loading
+5 −24
Original line number Diff line number Diff line
@@ -93,7 +93,6 @@ static int inotify_handle_event(struct fsnotify_group *group,
				struct fsnotify_mark *mark,
				struct fsnotify_event *event)
{
	struct fsnotify_mark *fsn_mark;
	struct inotify_inode_mark *i_mark;
	struct inode *to_tell;
	struct inotify_event_private_data *event_priv;
@@ -106,11 +105,7 @@ static int inotify_handle_event(struct fsnotify_group *group,

	to_tell = event->to_tell;

	fsn_mark = fsnotify_find_inode_mark(group, to_tell);
	/* race with watch removal?  We already passes should_send */
	if (unlikely(!fsn_mark))
		return 0;
	i_mark = container_of(fsn_mark, struct inotify_inode_mark,
	i_mark = container_of(mark, struct inotify_inode_mark,
			      fsn_mark);
	wd = i_mark->wd;

@@ -132,14 +127,8 @@ static int inotify_handle_event(struct fsnotify_group *group,
			ret = PTR_ERR(added_event);
	}

	if (fsn_mark->mask & IN_ONESHOT)
		fsnotify_destroy_mark(fsn_mark);

	/*
	 * If we hold the fsn_mark until after the event is on the queue
	 * IN_IGNORED won't be able to pass this event in the queue
	 */
	fsnotify_put_mark(fsn_mark);
	if (mark->mask & IN_ONESHOT)
		fsnotify_destroy_mark(mark);

	return ret;
}
@@ -153,20 +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)
{
	struct fsnotify_mark *fsn_mark;
	bool send;

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

	fsn_mark = fsnotify_find_inode_mark(group, inode);
	if (!fsn_mark)
		return false;

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

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

@@ -174,9 +158,6 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
			send = false;
	}

	/* find took a reference */
	fsnotify_put_mark(fsn_mark);

	return send;
}