summaryrefslogtreecommitdiffstats
path: root/fs/afs/super.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2018-11-01 23:07:27 +0000
committerAl Viro <viro@zeniv.linux.org.uk>2019-02-28 03:29:39 -0500
commitc99c2171fc61476afac0dfb59fb2c447a01fb1e0 (patch)
tree605a01fb179d84069ecceed7b9c8da85873d4948 /fs/afs/super.c
parent13fcc6837049f1bd76d57e9abc217a91fdbad764 (diff)
downloadlinux-c99c2171fc61476afac0dfb59fb2c447a01fb1e0.tar.gz
linux-c99c2171fc61476afac0dfb59fb2c447a01fb1e0.tar.bz2
linux-c99c2171fc61476afac0dfb59fb2c447a01fb1e0.zip
afs: Use fs_context to pass parameters over automount
Alter the AFS automounting code to create and modify an fs_context struct when parameterising a new mount triggered by an AFS mountpoint rather than constructing device name and option strings. Also remove the cell=, vol= and rwpath options as they are then redundant. The reason they existed is because the 'device name' may be derived literally from a mountpoint object in the filesystem, so default cell and parent-type information needed to be passed in by some other method from the automount routines. The vol= option didn't end up being used. Signed-off-by: David Howells <dhowells@redhat.com> cc: Eric W. Biederman <ebiederm@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/afs/super.c')
-rw-r--r--fs/afs/super.c40
1 files changed, 3 insertions, 37 deletions
diff --git a/fs/afs/super.c b/fs/afs/super.c
index e1a7a8085262..a07af1ab488d 100644
--- a/fs/afs/super.c
+++ b/fs/afs/super.c
@@ -66,20 +66,14 @@ static atomic_t afs_count_active_inodes;
enum afs_param {
Opt_autocell,
- Opt_cell,
Opt_dyn,
- Opt_rwpath,
Opt_source,
- Opt_vol,
};
static const struct fs_parameter_spec afs_param_specs[] = {
fsparam_flag ("autocell", Opt_autocell),
- fsparam_string("cell", Opt_cell),
fsparam_flag ("dyn", Opt_dyn),
- fsparam_flag ("rwpath", Opt_rwpath),
fsparam_string("source", Opt_source),
- fsparam_string("vol", Opt_vol),
{}
};
@@ -202,8 +196,8 @@ static int afs_show_options(struct seq_file *m, struct dentry *root)
*
* This can be one of the following:
* "%[cell:]volume[.]" R/W volume
- * "#[cell:]volume[.]" R/O or R/W volume (rwpath=0),
- * or R/W (rwpath=1) volume
+ * "#[cell:]volume[.]" R/O or R/W volume (R/O parent),
+ * or R/W (R/W parent) volume
* "%[cell:]volume.readonly" R/O volume
* "#[cell:]volume.readonly" R/O volume
* "%[cell:]volume.backup" Backup volume
@@ -234,9 +228,7 @@ static int afs_parse_source(struct fs_context *fc, struct fs_parameter *param)
}
/* determine the type of volume we're looking for */
- ctx->type = AFSVL_ROVOL;
- ctx->force = false;
- if (ctx->rwpath || name[0] == '%') {
+ if (name[0] == '%') {
ctx->type = AFSVL_RWVOL;
ctx->force = true;
}
@@ -305,7 +297,6 @@ static int afs_parse_param(struct fs_context *fc, struct fs_parameter *param)
{
struct fs_parse_result result;
struct afs_fs_context *ctx = fc->fs_private;
- struct afs_cell *cell;
int opt;
opt = fs_parse(fc, &afs_fs_parameters, param, &result);
@@ -313,21 +304,6 @@ static int afs_parse_param(struct fs_context *fc, struct fs_parameter *param)
return opt;
switch (opt) {
- case Opt_cell:
- if (param->size <= 0)
- return -EINVAL;
- if (param->size > AFS_MAXCELLNAME)
- return -ENAMETOOLONG;
-
- rcu_read_lock();
- cell = afs_lookup_cell_rcu(ctx->net, param->string, param->size);
- rcu_read_unlock();
- if (IS_ERR(cell))
- return PTR_ERR(cell);
- afs_put_cell(ctx->net, ctx->cell);
- ctx->cell = cell;
- break;
-
case Opt_source:
return afs_parse_source(fc, param);
@@ -339,13 +315,6 @@ static int afs_parse_param(struct fs_context *fc, struct fs_parameter *param)
ctx->dyn_root = true;
break;
- case Opt_rwpath:
- ctx->rwpath = true;
- break;
-
- case Opt_vol:
- return invalf(fc, "'vol' param is obsolete");
-
default:
return -EINVAL;
}
@@ -616,9 +585,6 @@ static int afs_init_fs_context(struct fs_context *fc)
struct afs_fs_context *ctx;
struct afs_cell *cell;
- if (current->nsproxy->net_ns != &init_net)
- return -EINVAL;
-
ctx = kzalloc(sizeof(struct afs_fs_context), GFP_KERNEL);
if (!ctx)
return -ENOMEM;