Merge tag 'pm-5.15-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-2.6-microblaze.git] / fs / btrfs / ioctl.c
index 41524f9..cc61813 100644 (file)
@@ -3223,6 +3223,8 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
        struct inode *inode = file_inode(file);
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
        struct btrfs_ioctl_vol_args_v2 *vol_args;
+       struct block_device *bdev = NULL;
+       fmode_t mode;
        int ret;
        bool cancel = false;
 
@@ -3255,9 +3257,9 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
        /* Exclusive operation is now claimed */
 
        if (vol_args->flags & BTRFS_DEVICE_SPEC_BY_ID)
-               ret = btrfs_rm_device(fs_info, NULL, vol_args->devid);
+               ret = btrfs_rm_device(fs_info, NULL, vol_args->devid, &bdev, &mode);
        else
-               ret = btrfs_rm_device(fs_info, vol_args->name, 0);
+               ret = btrfs_rm_device(fs_info, vol_args->name, 0, &bdev, &mode);
 
        btrfs_exclop_finish(fs_info);
 
@@ -3273,6 +3275,8 @@ out:
        kfree(vol_args);
 err_drop:
        mnt_drop_write_file(file);
+       if (bdev)
+               blkdev_put(bdev, mode);
        return ret;
 }
 
@@ -3281,6 +3285,8 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg)
        struct inode *inode = file_inode(file);
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
        struct btrfs_ioctl_vol_args *vol_args;
+       struct block_device *bdev = NULL;
+       fmode_t mode;
        int ret;
        bool cancel;
 
@@ -3302,7 +3308,7 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg)
        ret = exclop_start_or_cancel_reloc(fs_info, BTRFS_EXCLOP_DEV_REMOVE,
                                           cancel);
        if (ret == 0) {
-               ret = btrfs_rm_device(fs_info, vol_args->name, 0);
+               ret = btrfs_rm_device(fs_info, vol_args->name, 0, &bdev, &mode);
                if (!ret)
                        btrfs_info(fs_info, "disk deleted %s", vol_args->name);
                btrfs_exclop_finish(fs_info);
@@ -3311,7 +3317,8 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg)
        kfree(vol_args);
 out_drop_write:
        mnt_drop_write_file(file);
-
+       if (bdev)
+               blkdev_put(bdev, mode);
        return ret;
 }