forked from Minki/linux
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: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
c30da2e981
commit
c7eb686963
@ -504,7 +504,6 @@ void put_fs_context(struct fs_context *fc)
|
|||||||
put_net(fc->net_ns);
|
put_net(fc->net_ns);
|
||||||
put_user_ns(fc->user_ns);
|
put_user_ns(fc->user_ns);
|
||||||
put_cred(fc->cred);
|
put_cred(fc->cred);
|
||||||
kfree(fc->subtype);
|
|
||||||
put_fc_log(fc);
|
put_fc_log(fc);
|
||||||
put_filesystem(fc->fs_type);
|
put_filesystem(fc->fs_type);
|
||||||
kfree(fc->source);
|
kfree(fc->source);
|
||||||
@ -571,17 +570,6 @@ static int legacy_parse_param(struct fs_context *fc, struct fs_parameter *param)
|
|||||||
return 0;
|
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)
|
if (ctx->param_type == LEGACY_FS_MONOLITHIC_PARAMS)
|
||||||
return invalf(fc, "VFS: Legacy: Can't mix monolithic and individual options");
|
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->s_fs_info = NULL;
|
||||||
fc->sb_flags = 0;
|
fc->sb_flags = 0;
|
||||||
security_free_mnt_opts(&fc->security);
|
security_free_mnt_opts(&fc->security);
|
||||||
kfree(fc->subtype);
|
|
||||||
fc->subtype = NULL;
|
|
||||||
kfree(fc->source);
|
kfree(fc->source);
|
||||||
fc->source = NULL;
|
fc->source = NULL;
|
||||||
|
|
||||||
|
@ -473,8 +473,7 @@ static const struct fs_parameter_spec fuse_param_specs[] = {
|
|||||||
fsparam_flag ("allow_other", OPT_ALLOW_OTHER),
|
fsparam_flag ("allow_other", OPT_ALLOW_OTHER),
|
||||||
fsparam_u32 ("max_read", OPT_MAX_READ),
|
fsparam_u32 ("max_read", OPT_MAX_READ),
|
||||||
fsparam_u32 ("blksize", OPT_BLKSIZE),
|
fsparam_u32 ("blksize", OPT_BLKSIZE),
|
||||||
__fsparam(fs_param_is_string, "subtype", OPT_SUBTYPE,
|
fsparam_string ("subtype", OPT_SUBTYPE),
|
||||||
fs_param_v_optional),
|
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2768,8 +2768,6 @@ static int do_new_mount(struct path *path, const char *fstype, int sb_flags,
|
|||||||
put_filesystem(type);
|
put_filesystem(type);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
subtype = "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
static void show_type(struct seq_file *m, struct super_block *sb)
|
||||||
{
|
{
|
||||||
mangle(m, sb->s_type->name);
|
mangle(m, sb->s_type->name);
|
||||||
if (sb->s_subtype && sb->s_subtype[0]) {
|
if (sb->s_subtype) {
|
||||||
seq_putc(m, '.');
|
seq_putc(m, '.');
|
||||||
mangle(m, sb->s_subtype);
|
mangle(m, sb->s_subtype);
|
||||||
}
|
}
|
||||||
|
@ -1530,11 +1530,6 @@ int vfs_get_tree(struct fs_context *fc)
|
|||||||
sb = fc->root->d_sb;
|
sb = fc->root->d_sb;
|
||||||
WARN_ON(!sb->s_bdi);
|
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
|
* Write barrier is for super_cache_count(). We place it before setting
|
||||||
* SB_BORN as the data dependency between the two functions is the
|
* SB_BORN as the data dependency between the two functions is the
|
||||||
|
@ -95,7 +95,6 @@ struct fs_context {
|
|||||||
const struct cred *cred; /* The mounter's credentials */
|
const struct cred *cred; /* The mounter's credentials */
|
||||||
struct fc_log *log; /* Logging buffer */
|
struct fc_log *log; /* Logging buffer */
|
||||||
const char *source; /* The source name (eg. dev path) */
|
const char *source; /* The source name (eg. dev path) */
|
||||||
const char *subtype; /* The subtype to set on the superblock */
|
|
||||||
void *security; /* Linux S&M options */
|
void *security; /* Linux S&M options */
|
||||||
void *s_fs_info; /* Proposed s_fs_info */
|
void *s_fs_info; /* Proposed s_fs_info */
|
||||||
unsigned int sb_flags; /* Proposed superblock flags (SB_*) */
|
unsigned int sb_flags; /* Proposed superblock flags (SB_*) */
|
||||||
|
Loading…
Reference in New Issue
Block a user