diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index e82463739c05..8d5fe0511735 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -494,12 +494,16 @@ static int fuse_parse_param(struct fs_context *fc, struct fs_parameter *param) struct fuse_fs_context *ctx = fc->fs_private; int opt; - /* - * Ignore options coming from mount(MS_REMOUNT) for backward - * compatibility. - */ - if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) - return 0; + if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) { + /* + * Ignore options coming from mount(MS_REMOUNT) for backward + * compatibility. + */ + if (fc->oldapi) + return 0; + + return invalf(fc, "No changes allowed in reconfigure"); + } opt = fs_parse(fc, &fuse_fs_parameters, param, &result); if (opt < 0) diff --git a/fs/namespace.c b/fs/namespace.c index 476af049ae92..47e94bd0e5eb 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2426,6 +2426,7 @@ static int do_remount(struct path *path, int ms_flags, int sb_flags, if (IS_ERR(fc)) return PTR_ERR(fc); + fc->oldapi = true; err = parse_monolithic_mount_data(fc, data); if (!err) { down_write(&sb->s_umount); diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h index fdb45c79c6a5..bae58e50a384 100644 --- a/include/linux/fs_context.h +++ b/include/linux/fs_context.h @@ -91,6 +91,7 @@ struct fs_context { enum fs_context_purpose purpose:8; bool need_free:1; /* Need to call ops->free() */ bool global:1; /* Goes into &init_user_ns */ + bool oldapi:1; /* Coming from mount(2) */ }; struct fs_context_operations {