Commit c7eb6869 authored by David Howells's avatar David Howells Committed by Miklos Szeredi
Browse files

vfs: subtype handling moved to fuse



The unused vfs code can be removed.  Don't pass empty subtype (same as if
->parse callback isn't called).

The bits that are left involve determining whether it's permitted to split the
filesystem type string passed in to mount(2).  Consequently, this means that we
cannot get rid of the FS_HAS_SUBTYPE flag unless we define that a type string
with a dot in it always indicates a subtype specification.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent c30da2e9
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -504,7 +504,6 @@ void put_fs_context(struct fs_context *fc)
	put_net(fc->net_ns);
	put_user_ns(fc->user_ns);
	put_cred(fc->cred);
	kfree(fc->subtype);
	put_fc_log(fc);
	put_filesystem(fc->fs_type);
	kfree(fc->source);
@@ -571,17 +570,6 @@ static int legacy_parse_param(struct fs_context *fc, struct fs_parameter *param)
		return 0;
	}

	if ((fc->fs_type->fs_flags & FS_HAS_SUBTYPE) &&
	    strcmp(param->key, "subtype") == 0) {
		if (param->type != fs_value_is_string)
			return invalf(fc, "VFS: Legacy: Non-string subtype");
		if (fc->subtype)
			return invalf(fc, "VFS: Legacy: Multiple subtype");
		fc->subtype = param->string;
		param->string = NULL;
		return 0;
	}

	if (ctx->param_type == LEGACY_FS_MONOLITHIC_PARAMS)
		return invalf(fc, "VFS: Legacy: Can't mix monolithic and individual options");

@@ -738,8 +726,6 @@ void vfs_clean_context(struct fs_context *fc)
	fc->s_fs_info = NULL;
	fc->sb_flags = 0;
	security_free_mnt_opts(&fc->security);
	kfree(fc->subtype);
	fc->subtype = NULL;
	kfree(fc->source);
	fc->source = NULL;

+1 −2
Original line number Diff line number Diff line
@@ -473,8 +473,7 @@ static const struct fs_parameter_spec fuse_param_specs[] = {
	fsparam_flag	("allow_other",		OPT_ALLOW_OTHER),
	fsparam_u32	("max_read",		OPT_MAX_READ),
	fsparam_u32	("blksize",		OPT_BLKSIZE),
	__fsparam(fs_param_is_string, "subtype", OPT_SUBTYPE,
		  fs_param_v_optional),
	fsparam_string	("subtype",		OPT_SUBTYPE),
	{}
};

+0 −2
Original line number Diff line number Diff line
@@ -2768,8 +2768,6 @@ static int do_new_mount(struct path *path, const char *fstype, int sb_flags,
				put_filesystem(type);
				return -EINVAL;
			}
		} else {
			subtype = "";
		}
	}

+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ static inline void mangle(struct seq_file *m, const char *s)
static void show_type(struct seq_file *m, struct super_block *sb)
{
	mangle(m, sb->s_type->name);
	if (sb->s_subtype && sb->s_subtype[0]) {
	if (sb->s_subtype) {
		seq_putc(m, '.');
		mangle(m, sb->s_subtype);
	}
+0 −5
Original line number Diff line number Diff line
@@ -1530,11 +1530,6 @@ int vfs_get_tree(struct fs_context *fc)
	sb = fc->root->d_sb;
	WARN_ON(!sb->s_bdi);

	if (fc->subtype && !sb->s_subtype) {
		sb->s_subtype = fc->subtype;
		fc->subtype = NULL;
	}

	/*
	 * Write barrier is for super_cache_count(). We place it before setting
	 * SB_BORN as the data dependency between the two functions is the
Loading