Commit 867a448d authored by Amir Goldstein's avatar Amir Goldstein Committed by Jan Kara
Browse files

fsnotify: pass flags argument to fsnotify_alloc_group()

Add flags argument to fsnotify_alloc_group(), define and use the flag
FSNOTIFY_GROUP_USER in inotify and fanotify instead of the helper
fsnotify_alloc_user_group() to indicate user allocation.

Although the flag FSNOTIFY_GROUP_USER is currently not used after group
allocation, we store the flags argument in the group struct for future
use of other group flags.

Link: https://lore.kernel.org/r/20220422120327.3459282-5-amir73il@gmail.com


Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 623af4f5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -678,7 +678,8 @@ nfsd_file_cache_init(void)
		goto out_shrinker;
	}

	nfsd_file_fsnotify_group = fsnotify_alloc_group(&nfsd_file_fsnotify_ops);
	nfsd_file_fsnotify_group = fsnotify_alloc_group(&nfsd_file_fsnotify_ops,
							0);
	if (IS_ERR(nfsd_file_fsnotify_group)) {
		pr_err("nfsd: unable to create fsnotify group: %ld\n",
			PTR_ERR(nfsd_file_fsnotify_group));
+1 −1
Original line number Diff line number Diff line
@@ -401,7 +401,7 @@ static int __init dnotify_init(void)
					  SLAB_PANIC|SLAB_ACCOUNT);
	dnotify_mark_cache = KMEM_CACHE(dnotify_mark, SLAB_PANIC|SLAB_ACCOUNT);

	dnotify_group = fsnotify_alloc_group(&dnotify_fsnotify_ops);
	dnotify_group = fsnotify_alloc_group(&dnotify_fsnotify_ops, 0);
	if (IS_ERR(dnotify_group))
		panic("unable to allocate fsnotify group for dnotify\n");
	dnotify_sysctl_init();
+2 −1
Original line number Diff line number Diff line
@@ -1355,7 +1355,8 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
		f_flags |= O_NONBLOCK;

	/* fsnotify_alloc_group takes a ref.  Dropped in fanotify_release */
	group = fsnotify_alloc_user_group(&fanotify_fsnotify_ops);
	group = fsnotify_alloc_group(&fanotify_fsnotify_ops,
				     FSNOTIFY_GROUP_USER);
	if (IS_ERR(group)) {
		return PTR_ERR(group);
	}
+9 −12
Original line number Diff line number Diff line
@@ -112,7 +112,8 @@ void fsnotify_put_group(struct fsnotify_group *group)
EXPORT_SYMBOL_GPL(fsnotify_put_group);

static struct fsnotify_group *__fsnotify_alloc_group(
				const struct fsnotify_ops *ops, gfp_t gfp)
				const struct fsnotify_ops *ops,
				int flags, gfp_t gfp)
{
	struct fsnotify_group *group;

@@ -133,6 +134,7 @@ static struct fsnotify_group *__fsnotify_alloc_group(
	INIT_LIST_HEAD(&group->marks_list);

	group->ops = ops;
	group->flags = flags;

	return group;
}
@@ -140,20 +142,15 @@ static struct fsnotify_group *__fsnotify_alloc_group(
/*
 * Create a new fsnotify_group and hold a reference for the group returned.
 */
struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops,
					    int flags)
{
	return __fsnotify_alloc_group(ops, GFP_KERNEL);
}
EXPORT_SYMBOL_GPL(fsnotify_alloc_group);
	gfp_t gfp = (flags & FSNOTIFY_GROUP_USER) ? GFP_KERNEL_ACCOUNT :
						    GFP_KERNEL;

/*
 * Create a new fsnotify_group and hold a reference for the group returned.
 */
struct fsnotify_group *fsnotify_alloc_user_group(const struct fsnotify_ops *ops)
{
	return __fsnotify_alloc_group(ops, GFP_KERNEL_ACCOUNT);
	return __fsnotify_alloc_group(ops, flags, gfp);
}
EXPORT_SYMBOL_GPL(fsnotify_alloc_user_group);
EXPORT_SYMBOL_GPL(fsnotify_alloc_group);

int fsnotify_fasync(int fd, struct file *file, int on)
{
+2 −1
Original line number Diff line number Diff line
@@ -656,7 +656,8 @@ static struct fsnotify_group *inotify_new_group(unsigned int max_events)
	struct fsnotify_group *group;
	struct inotify_event_info *oevent;

	group = fsnotify_alloc_user_group(&inotify_fsnotify_ops);
	group = fsnotify_alloc_group(&inotify_fsnotify_ops,
				     FSNOTIFY_GROUP_USER);
	if (IS_ERR(group))
		return group;

Loading