diff options
Diffstat (limited to 'fs/btrfs/dev-replace.c')
-rw-r--r-- | fs/btrfs/dev-replace.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index 8531b5dae777..9fe7be7fdbef 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c | |||
@@ -896,7 +896,17 @@ int btrfs_resume_dev_replace_async(struct btrfs_fs_info *fs_info) | |||
896 | } | 896 | } |
897 | btrfs_dev_replace_write_unlock(dev_replace); | 897 | btrfs_dev_replace_write_unlock(dev_replace); |
898 | 898 | ||
899 | WARN_ON(test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags)); | 899 | /* |
900 | * This could collide with a paused balance, but the exclusive op logic | ||
901 | * should never allow both to start and pause. We don't want to allow | ||
902 | * dev-replace to start anyway. | ||
903 | */ | ||
904 | if (test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags)) { | ||
905 | btrfs_info(fs_info, | ||
906 | "cannot resume dev-replace, other exclusive operation running"); | ||
907 | return 0; | ||
908 | } | ||
909 | |||
900 | task = kthread_run(btrfs_dev_replace_kthread, fs_info, "btrfs-devrepl"); | 910 | task = kthread_run(btrfs_dev_replace_kthread, fs_info, "btrfs-devrepl"); |
901 | return PTR_ERR_OR_ZERO(task); | 911 | return PTR_ERR_OR_ZERO(task); |
902 | } | 912 | } |