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 > >