On 14/04/2021 14:09, fdman...@kernel.org wrote:
> From: Filipe Manana <fdman...@suse.com>
> 
> When doing a device replace on a zoned filesystem, if we find a block
> group with ->to_copy == 0, we jump to the label 'done', which will result
> in later calling btrfs_unfreeze_block_group(), even though at this point
> we never called btrfs_freeze_block_group().
> 
> Since at this point we have neither turned the block group to RO mode nor
> made any progress, we don't need to jump to the label 'done'. So fix this
> by jumping instead to the label 'skip' and dropping our reference on the
> block group before the jump.
> 
> Fixes: 78ce9fc269af6e ("btrfs: zoned: mark block groups to copy for 
> device-replace")
> Signed-off-by: Filipe Manana <fdman...@suse.com>
> ---
>  fs/btrfs/scrub.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
> index 17e49caad1f9..e0d54ed9acee 100644
> --- a/fs/btrfs/scrub.c
> +++ b/fs/btrfs/scrub.c
> @@ -3674,8 +3674,8 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
>                       spin_lock(&cache->lock);
>                       if (!cache->to_copy) {
>                               spin_unlock(&cache->lock);
> -                             ro_set = 0;
> -                             goto done;
> +                             btrfs_put_block_group(cache);
> +                             goto skip;
>                       }
>                       spin_unlock(&cache->lock);
>               }
> 

I think we can remove the 'done' label as well, as after this patch it is
unused (at least on my clone of misc-next).

Otherwise,
Reviewed-by: Johannes Thumshirn <johannes.thumsh...@wdc.com>

Reply via email to