don't bother copying ->legacy_data for monolithic case
we don't need it - the thing can't be r/o anyway and we'll never
need to extend it (mixing monolithic and individual is impossible,
extraction of LSM options only shrinks the string in place)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/fs_context.c b/fs/fs_context.c
index 7b234f6..1e0dc38 100644
--- a/fs/fs_context.c
+++ b/fs/fs_context.c
@@ -29,10 +29,8 @@
enum legacy_fs_param {
LEGACY_FS_UNSET_PARAMS,
- LEGACY_FS_NO_PARAMS,
LEGACY_FS_MONOLITHIC_PARAMS,
LEGACY_FS_INDIVIDUAL_PARAMS,
- LEGACY_FS_MAGIC_PARAMS,
};
struct legacy_fs_context {
@@ -434,17 +432,8 @@
if (ctx) {
free_secdata(ctx->secdata);
- switch (ctx->param_type) {
- case LEGACY_FS_UNSET_PARAMS:
- case LEGACY_FS_NO_PARAMS:
- break;
- case LEGACY_FS_MAGIC_PARAMS:
- break; /* ctx->data is a weird pointer */
- default:
+ if (ctx->param_type == LEGACY_FS_INDIVIDUAL_PARAMS)
kfree(ctx->legacy_data);
- break;
- }
-
kfree(ctx);
}
}
@@ -461,18 +450,13 @@
if (!ctx)
return -ENOMEM;
- switch (ctx->param_type) {
- case LEGACY_FS_MONOLITHIC_PARAMS:
- case LEGACY_FS_INDIVIDUAL_PARAMS:
+ if (ctx->param_type == LEGACY_FS_INDIVIDUAL_PARAMS) {
ctx->legacy_data = kmemdup(src_ctx->legacy_data,
src_ctx->data_size, GFP_KERNEL);
if (!ctx->legacy_data) {
kfree(ctx);
return -ENOMEM;
}
- /* Fall through */
- default:
- break;
}
fc->fs_private = ctx;
@@ -510,8 +494,7 @@
return 0;
}
- if (ctx->param_type != LEGACY_FS_UNSET_PARAMS &&
- ctx->param_type != LEGACY_FS_INDIVIDUAL_PARAMS)
+ if (ctx->param_type == LEGACY_FS_MONOLITHIC_PARAMS)
return invalf(fc, "VFS: Legacy: Can't mix monolithic and individual options");
switch (param->type) {
@@ -566,26 +549,9 @@
return -EINVAL;
}
- if (!data) {
- ctx->param_type = LEGACY_FS_NO_PARAMS;
- return 0;
- }
-
ctx->data_size = data_size;
- if (data_size > 0) {
- ctx->legacy_data = kmemdup(data, data_size, GFP_KERNEL);
- if (!ctx->legacy_data)
- return -ENOMEM;
- ctx->param_type = LEGACY_FS_MONOLITHIC_PARAMS;
- } else {
- /* Some filesystems pass weird pointers through that we don't
- * want to copy. They can indicate this by setting data_size
- * to 0.
- */
- ctx->legacy_data = data;
- ctx->param_type = LEGACY_FS_MAGIC_PARAMS;
- }
-
+ ctx->legacy_data = data;
+ ctx->param_type = LEGACY_FS_MONOLITHIC_PARAMS;
return 0;
}
@@ -598,16 +564,11 @@
struct legacy_fs_context *ctx = fc->fs_private;
int err;
- switch (ctx->param_type) {
- case LEGACY_FS_UNSET_PARAMS:
- ctx->param_type = LEGACY_FS_NO_PARAMS;
- /* Fall through */
- case LEGACY_FS_NO_PARAMS:
- case LEGACY_FS_MAGIC_PARAMS:
+ if (ctx->param_type == LEGACY_FS_UNSET_PARAMS)
+ ctx->param_type = LEGACY_FS_MONOLITHIC_PARAMS;
+
+ if (!ctx->legacy_data)
return 0;
- default:
- break;
- }
if (fc->fs_type->fs_flags & FS_BINARY_MOUNTDATA)
return 0;