]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: disable device manipulation ioctl's EXTENT_TREE_V2
authorJosef Bacik <josef@toxicpanda.com>
Wed, 15 Dec 2021 20:40:00 +0000 (15:40 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 14 Mar 2022 12:13:48 +0000 (13:13 +0100)
Device add, remove, and replace all require balance, which doesn't work
right now on extent tree v2, so disable these for now.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c
fs/btrfs/volumes.c

index dbb0a8dad770a86e0add58f942574faac34baf0f..7a59887a2b544279360f36f9bfe7c593f370eff5 100644 (file)
@@ -3449,6 +3449,11 @@ static long btrfs_ioctl_add_dev(struct btrfs_fs_info *fs_info, void __user *arg)
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
+       if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) {
+               btrfs_err(fs_info, "device add not supported on extent tree v2 yet");
+               return -EINVAL;
+       }
+
        if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_DEV_ADD)) {
                if (!btrfs_exclop_start_try_lock(fs_info, BTRFS_EXCLOP_DEV_ADD))
                        return BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS;
@@ -4073,6 +4078,11 @@ static long btrfs_ioctl_dev_replace(struct btrfs_fs_info *fs_info,
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
+       if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) {
+               btrfs_err(fs_info, "device replace not supported on extent tree v2 yet");
+               return -EINVAL;
+       }
+
        p = memdup_user(arg, sizeof(*p));
        if (IS_ERR(p))
                return PTR_ERR(p);
index 4c0f8a10e5cd36f3739bbb9195c5fdaaa2696ec8..fa7fee09e39b8677ddc98c07ed35ecb124554137 100644 (file)
@@ -2085,6 +2085,11 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info,
        u64 num_devices;
        int ret = 0;
 
+       if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) {
+               btrfs_err(fs_info, "device remove not supported on extent tree v2 yet");
+               return -EINVAL;
+       }
+
        /*
         * The device list in fs_devices is accessed without locks (neither
         * uuid_mutex nor device_list_mutex) as it won't change on a mounted