On 19.04.2018 19:33, David Sterba wrote:
> The device replace is paused by unmount or read only remount, and
> resumed on next mount or write remount.
> 
> The exclusive status should be checked properly as it's a global
> invariant and we must not allow 2 operations run. In this case, the
> balance can be also paused and resumed under same conditions. It's
> always checked first so dev-replace could see the EXCL_OP already taken,
> BUT, the ioctl would never let start both at the same time.
> 
> Replace the WARN_ON with message and return 0, indicating no error as
> this is purely theoretical and the user will be informed. Resolving that
> manually should be possible by waiting for the other operation to finish
> or cancel the paused state.
> 
> Signed-off-by: David Sterba <dste...@suse.com>

Reviewed-by: Nikolay Borisov <nbori...@suse.com>

> ---
>  fs/btrfs/dev-replace.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
> index 7a87ffad041e..346bd460f8e7 100644
> --- a/fs/btrfs/dev-replace.c
> +++ b/fs/btrfs/dev-replace.c
> @@ -908,7 +908,17 @@ int btrfs_resume_dev_replace_async(struct btrfs_fs_info 
> *fs_info)
>       }
>       btrfs_dev_replace_write_unlock(dev_replace);
>  
> -     WARN_ON(test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags));
> +     /*
> +      * This could collide with a paused balance, but the exclusive op logic
> +      * should never allow both to start and pause. We don't want to allow
> +      * dev-replace to start anyway.
> +      */
> +     if (test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags)) {
> +             btrfs_info(fs_info,
> +             "cannot resume dev-replace, other exclusive operation running");
> +             return 0;
> +     }
> +
>       task = kthread_run(btrfs_dev_replace_kthread, fs_info, "btrfs-devrepl");
>       return PTR_ERR_OR_ZERO(task);
>  }
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to