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

Commit 533770cc authored by Al Viro's avatar Al Viro
Browse files

new helper: get_tree_keyed()



For vfs_get_keyed_super users.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1dd9bc08
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1386,8 +1386,7 @@ static int nfsd_fill_super(struct super_block *sb, struct fs_context *fc)

static int nfsd_fs_get_tree(struct fs_context *fc)
{
	fc->s_fs_info = get_net(fc->net_ns);
	return vfs_get_super(fc, vfs_get_keyed_super, nfsd_fill_super);
	return get_tree_keyed(fc, nfsd_fill_super, get_net(fc->net_ns));
}

static void nfsd_fs_free_fc(struct fs_context *fc)
+1 −2
Original line number Diff line number Diff line
@@ -157,8 +157,7 @@ static int proc_get_tree(struct fs_context *fc)
{
	struct proc_fs_context *ctx = fc->fs_private;

	fc->s_fs_info = ctx->pid_ns;
	return vfs_get_super(fc, vfs_get_keyed_super, proc_fill_super);
	return get_tree_keyed(fc, proc_fill_super, ctx->pid_ns);
}

static void proc_fs_context_free(struct fs_context *fc)
+10 −0
Original line number Diff line number Diff line
@@ -1211,6 +1211,16 @@ int get_tree_single(struct fs_context *fc,
}
EXPORT_SYMBOL(get_tree_single);

int get_tree_keyed(struct fs_context *fc,
		  int (*fill_super)(struct super_block *sb,
				    struct fs_context *fc),
		void *key)
{
	fc->s_fs_info = key;
	return vfs_get_super(fc, vfs_get_keyed_super, fill_super);
}
EXPORT_SYMBOL(get_tree_keyed);

#ifdef CONFIG_BLOCK
static int set_bdev_super(struct super_block *s, void *data)
{
+6 −1
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ extern int vfs_get_tree(struct fs_context *fc);
extern void put_fs_context(struct fs_context *fc);

/*
 * sget() wrapper to be called from the ->get_tree() op.
 * sget() wrappers to be called from the ->get_tree() op.
 */
enum vfs_get_super_keying {
	vfs_get_single_super,	/* Only one such superblock may exist */
@@ -147,12 +147,17 @@ extern int vfs_get_super(struct fs_context *fc,
			 enum vfs_get_super_keying keying,
			 int (*fill_super)(struct super_block *sb,
					   struct fs_context *fc));

extern int get_tree_nodev(struct fs_context *fc,
			 int (*fill_super)(struct super_block *sb,
					   struct fs_context *fc));
extern int get_tree_single(struct fs_context *fc,
			 int (*fill_super)(struct super_block *sb,
					   struct fs_context *fc));
extern int get_tree_keyed(struct fs_context *fc,
			 int (*fill_super)(struct super_block *sb,
					   struct fs_context *fc),
			 void *key);

extern const struct file_operations fscontext_fops;

+1 −2
Original line number Diff line number Diff line
@@ -364,8 +364,7 @@ static int mqueue_get_tree(struct fs_context *fc)
{
	struct mqueue_fs_context *ctx = fc->fs_private;

	fc->s_fs_info = ctx->ipc_ns;
	return vfs_get_super(fc, vfs_get_keyed_super, mqueue_fill_super);
	return get_tree_keyed(fc, mqueue_fill_super, ctx->ipc_ns);
}

static void mqueue_fs_context_free(struct fs_context *fc)
Loading