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

Commit 43709a28 authored by Eric Paris's avatar Eric Paris
Browse files

fsnotify: remove group->mask



group->mask is now useless.  It was originally a shortcut for fsnotify to
save on performance.  These checks are now redundant, so we remove them.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 03930979
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -199,8 +199,6 @@ void dnotify_flush(struct file *filp, fl_owner_t id)
	if (dn_mark->dn == NULL)
		fsnotify_destroy_mark(fsn_mark);

	fsnotify_recalc_group_mask(dnotify_group);

	mutex_unlock(&dnotify_mark_mutex);

	fsnotify_put_mark(fsn_mark);
@@ -385,8 +383,6 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
	if (destroy)
		fsnotify_destroy_mark(fsn_mark);

	fsnotify_recalc_group_mask(dnotify_group);

	mutex_unlock(&dnotify_mark_mutex);
	fsnotify_put_mark(fsn_mark);
out_err:
+5 −18
Original line number Diff line number Diff line
@@ -496,8 +496,6 @@ static int fanotify_remove_vfsmount_mark(struct fsnotify_group *group,

	removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags);
	fsnotify_put_mark(fsn_mark);
	if (removed & group->mask)
		fsnotify_recalc_group_mask(group);
	if (removed & mnt->mnt_fsnotify_mask)
		fsnotify_recalc_vfsmount_mask(mnt);

@@ -518,9 +516,6 @@ static int fanotify_remove_inode_mark(struct fsnotify_group *group,
	removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags);
	/* matches the fsnotify_find_inode_mark() */
	fsnotify_put_mark(fsn_mark);

	if (removed & group->mask)
		fsnotify_recalc_group_mask(group);
	if (removed & inode->i_fsnotify_mask)
		fsnotify_recalc_inode_mask(inode);

@@ -572,12 +567,9 @@ static int fanotify_add_vfsmount_mark(struct fsnotify_group *group,
	}
	added = fanotify_mark_add_to_mask(fsn_mark, mask, flags);
	fsnotify_put_mark(fsn_mark);
	if (added) {
		if (added & ~group->mask)
			fsnotify_recalc_group_mask(group);
	if (added & ~mnt->mnt_fsnotify_mask)
		fsnotify_recalc_vfsmount_mask(mnt);
	}

	return 0;
}

@@ -607,12 +599,8 @@ static int fanotify_add_inode_mark(struct fsnotify_group *group,
	}
	added = fanotify_mark_add_to_mask(fsn_mark, mask, flags);
	fsnotify_put_mark(fsn_mark);
	if (added) {
		if (added & ~group->mask)
			fsnotify_recalc_group_mask(group);
	if (added & ~inode->i_fsnotify_mask)
		fsnotify_recalc_inode_mask(inode);
	}
	return 0;
}

@@ -734,7 +722,6 @@ SYSCALL_DEFINE(fanotify_mark)(int fanotify_fd, unsigned int flags,
			fsnotify_clear_vfsmount_marks_by_group(group);
		else
			fsnotify_clear_inode_marks_by_group(group);
		fsnotify_recalc_group_mask(group);
		break;
	default:
		ret = -EINVAL;
+0 −16
Original line number Diff line number Diff line
@@ -35,22 +35,6 @@ LIST_HEAD(fsnotify_inode_groups);
/* all groups registered to receive mount point filesystem notifications */
LIST_HEAD(fsnotify_vfsmount_groups);

/*
 * Update the group->mask by running all of the marks associated with this
 * group and finding the bitwise | of all of the mark->mask.
 */
void fsnotify_recalc_group_mask(struct fsnotify_group *group)
{
	__u32 mask = 0;
	struct fsnotify_mark *mark;

	spin_lock(&group->mark_lock);
	list_for_each_entry(mark, &group->marks_list, g_list)
		mask |= mark->mask;
	group->mask = mask;
	spin_unlock(&group->mark_lock);
}

void fsnotify_add_vfsmount_group(struct fsnotify_group *group)
{
	struct fsnotify_group *group_iter;
+0 −9
Original line number Diff line number Diff line
@@ -606,16 +606,11 @@ static int inotify_update_existing_watch(struct fsnotify_group *group,
		int dropped = (old_mask & ~new_mask);
		/* more bits in this fsn_mark than the inode's mask? */
		int do_inode = (new_mask & ~inode->i_fsnotify_mask);
		/* more bits in this fsn_mark than the group? */
		int do_group = (new_mask & ~group->mask);

		/* update the inode with this new fsn_mark */
		if (dropped || do_inode)
			fsnotify_recalc_inode_mask(inode);

		/* update the group mask with the new mask */
		if (dropped || do_group)
			fsnotify_recalc_group_mask(group);
	}

	/* return the wd */
@@ -673,10 +668,6 @@ static int inotify_new_watch(struct fsnotify_group *group,
	/* return the watch descriptor for this new mark */
	ret = tmp_i_mark->wd;

	/* if this mark added a new event update the group mask */
	if (mask & ~group->mask)
		fsnotify_recalc_group_mask(group);

out_err:
	/* match the ref from fsnotify_init_mark() */
	fsnotify_put_mark(&tmp_i_mark->fsn_mark);
+0 −11
Original line number Diff line number Diff line
@@ -119,15 +119,6 @@ struct fsnotify_group {
	 */
	struct list_head vfsmount_group_list;

	/*
	 * Defines all of the event types in which this group is interested.
	 * This mask is a bitwise OR of the FS_* events from above.  Each time
	 * this mask changes for a group (if it changes) the correct functions
	 * must be called to update the global structures which indicate global
	 * interest in event types.
	 */
	__u32 mask;

	/*
	 * How the refcnt is used is up to each group.  When the refcnt hits 0
	 * fsnotify will clean up all of the resources associated with this group.
@@ -367,8 +358,6 @@ static inline void __fsnotify_d_instantiate(struct dentry *dentry, struct inode

/* get a reference to an existing or create a new group */
extern struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops);
/* run all marks associated with this group and update group->mask */
extern void fsnotify_recalc_group_mask(struct fsnotify_group *group);
/* drop reference on a group from fsnotify_alloc_group */
extern void fsnotify_put_group(struct fsnotify_group *group);

Loading