mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
btrfs: use the original mount's mount options for the legacy reconfigure
btrfs/330, which tests our old trick to allow
mount -o ro,subvol=/x /dev/sda1 /foo
mount -o rw,subvol=/y /dev/sda1 /bar
fails on the block group tree. This is because we aren't preserving the
mount options for what is essentially a remount, and thus we're ending
up without the FREE_SPACE_TREE mount option, which triggers our free
space tree delete codepath. This isn't possible with the block group
tree and thus it falls over.
Fix this by making sure we copy the existing mount options for the
existing fs mount over in this case.
Fixes: f044b31867
("btrfs: handle the ro->rw transition for mounting different subvolumes")
Reviewed-by: Neal Gompa <neal@gompa.dev>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
a208b3f132
commit
2018ef1d9a
@ -1451,6 +1451,14 @@ static int btrfs_reconfigure(struct fs_context *fc)
|
|||||||
|
|
||||||
btrfs_info_to_ctx(fs_info, &old_ctx);
|
btrfs_info_to_ctx(fs_info, &old_ctx);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is our "bind mount" trick, we don't want to allow the user to do
|
||||||
|
* anything other than mount a different ro/rw and a different subvol,
|
||||||
|
* all of the mount options should be maintained.
|
||||||
|
*/
|
||||||
|
if (mount_reconfigure)
|
||||||
|
ctx->mount_opt = old_ctx.mount_opt;
|
||||||
|
|
||||||
sync_filesystem(sb);
|
sync_filesystem(sb);
|
||||||
set_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
|
set_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user