Re: [PATCH] btrfs: raid56: fix an incorrect csum skip during scrub

Daniel Vacek <[email protected]>
Newsgroups org.kernel.vger.linux-btrfs
Message-ID <CAPjX3FdHP-cU0HQj-ibUbWZscvOFRceL9=A+PGTU875KWGdqyA@mail.gmail.com>
On Sun, 12 Jul 2026 at 05:43, Qu Wenruo <[email protected]> wrote:
> Commit 7425a2894019 ("btrfs: introduce btrfs_bio_for_each_block_all()
> helper") uses the new helper to replace the nested loop inside
> verify_bio_data_sectors(), which simplifies the code.
>
> However that also changed the behavior of "continue" when a block has no
> data checksum.
>
> Previously the "continue" will skip the old for() loop, which will also
> increase @total_sector_nr.
>
> Now the "continue" will skip the new btrfs_bio_for_each_block_all()
> loop, which doesn't update @total_sector_nr.
>
> This means if we hit a block that has no data checksum, we will skip all
> the remaining blocks no matter if they have data checksum.
> As @total_sector_nr will never be updated, and that test_bit() will
> always return false.
>
> Fix it by increasing @total_sector_nr before calling "continue".
>
> Fixes: 7425a2894019 ("btrfs: introduce btrfs_bio_for_each_block_all() helper")
> Signed-off-by: Qu Wenruo <[email protected]>

Thanks

Reviewed-by: Daniel Vacek <[email protected]>

> ---
>  fs/btrfs/raid56.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
> index baaa18b3c958..885602ab6448 100644
> --- a/fs/btrfs/raid56.c
> +++ b/fs/btrfs/raid56.c
> @@ -1679,8 +1679,10 @@ static void verify_bio_data_sectors(struct btrfs_raid_bio *rbio,
>                         continue;
>
>                 /* No csum for this sector, skip to the next sector. */
> -               if (!test_bit(total_sector_nr, rbio->csum_bitmap))
> +               if (!test_bit(total_sector_nr, rbio->csum_bitmap)) {
> +                       total_sector_nr++;
>                         continue;
> +               }
>
>                 expected_csum = rbio->csum_buf + total_sector_nr * fs_info->csum_size;
>                 btrfs_calculate_block_csum_pages(fs_info, paddrs, csum_buf);
> --
> 2.54.0
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.