btrfs: silence warning if replace is canceled
authorAnand Jain <anand.jain@oracle.com>
Tue, 20 Nov 2018 11:56:15 +0000 (19:56 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Dec 2018 13:51:35 +0000 (14:51 +0100)
When we successfully cancel the device replace, its scrub worker returns
-ECANCELED, which is then passed to btrfs_dev_replace_finishing.

It cleans up based on the returned status and propagates the same
-ECANCELED back the parent function. As of now only user can cancel the
replace-scrub, so its ok to silence the warning here.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/dev-replace.c

index 85d93bd3b27a0505dd4277fc4b07f85ae80c56a9..ead4f380352744f275c799637790b8b7bf242057 100644 (file)
@@ -503,7 +503,7 @@ static int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
        ret = btrfs_dev_replace_finishing(fs_info, ret);
        if (ret == -EINPROGRESS) {
                ret = BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS;
        ret = btrfs_dev_replace_finishing(fs_info, ret);
        if (ret == -EINPROGRESS) {
                ret = BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS;
-       } else {
+       } else if (ret != -ECANCELED) {
                WARN_ON(ret);
        }
 
                WARN_ON(ret);
        }
 
@@ -966,7 +966,7 @@ static int btrfs_dev_replace_kthread(void *data)
                              btrfs_device_get_total_bytes(dev_replace->srcdev),
                              &dev_replace->scrub_progress, 0, 1);
        ret = btrfs_dev_replace_finishing(fs_info, ret);
                              btrfs_device_get_total_bytes(dev_replace->srcdev),
                              &dev_replace->scrub_progress, 0, 1);
        ret = btrfs_dev_replace_finishing(fs_info, ret);
-       WARN_ON(ret);
+       WARN_ON(ret && ret != -ECANCELED);
 
        clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
        return 0;
 
        clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
        return 0;