]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/btrfs/dev-replace.c
Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel...
[karo-tx-linux.git] / fs / btrfs / dev-replace.c
index e653921f05d93936581785553a8964124f5df1c0..5fe1ca8abc70577fe28ee6fd69899d11b618d479 100644 (file)
@@ -546,8 +546,10 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
                mutex_unlock(&fs_info->chunk_mutex);
                mutex_unlock(&fs_info->fs_devices->device_list_mutex);
                mutex_unlock(&uuid_mutex);
+               btrfs_rm_dev_replace_blocked(fs_info);
                if (tgt_device)
                        btrfs_destroy_dev_replace_tgtdev(fs_info, tgt_device);
+               btrfs_rm_dev_replace_unblocked(fs_info);
                mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
 
                return scrub_ret;
@@ -665,7 +667,7 @@ void btrfs_dev_replace_status(struct btrfs_fs_info *fs_info,
        case BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED:
        case BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED:
                srcdev = dev_replace->srcdev;
-               args->status.progress_1000 = div_u64(dev_replace->cursor_left,
+               args->status.progress_1000 = div64_u64(dev_replace->cursor_left,
                        div_u64(btrfs_device_get_total_bytes(srcdev), 1000));
                break;
        }
@@ -784,8 +786,7 @@ int btrfs_resume_dev_replace_async(struct btrfs_fs_info *fs_info)
        }
        btrfs_dev_replace_unlock(dev_replace, 1);
 
-       WARN_ON(atomic_xchg(
-               &fs_info->mutually_exclusive_operation_running, 1));
+       WARN_ON(test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags));
        task = kthread_run(btrfs_dev_replace_kthread, fs_info, "btrfs-devrepl");
        return PTR_ERR_OR_ZERO(task);
 }
@@ -814,7 +815,7 @@ static int btrfs_dev_replace_kthread(void *data)
                        (unsigned int)progress);
        }
        btrfs_dev_replace_continue_on_mount(fs_info);
-       atomic_set(&fs_info->mutually_exclusive_operation_running, 0);
+       clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
 
        return 0;
 }