From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Anand Jain <anand.jain@oracle.com>, Qu Wenruo <wqu@suse.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 1/7] btrfs: scrub: fix incorrectly reported logical/physical address
Date: Fri, 15 Mar 2024 06:45:04 +1030 [thread overview]
Message-ID: <822eeff3-3ba6-4d51-98a2-636036ca90b2@gmx.com> (raw)
In-Reply-To: <1b78f6ea-04e5-41a9-9699-57ce70116870@oracle.com>
在 2024/3/14 22:54, Anand Jain 写道:
> On 3/14/24 15:20, Qu Wenruo wrote:
>> [BUG]
>> Scrub is not reporting the correct logical/physical address, it can be
>> verified by the following script:
>>
>> # mkfs.btrfs -f $dev1
>> # mount $dev1 $mnt
>> # xfs_io -f -c "pwrite -S 0xaa 0 128k" $mnt/file1
>> # umount $mnt
>> # xfs_io -f -c "pwrite -S 0xff 13647872 4k" $dev1
>> # mount $dev1 $mnt
>> # btrfs scrub start -fB $mnt
>> # umount $mnt
>>
>> Note above 13647872 is the physical address for logical 13631488 + 4K.
>>
>> Scrub would report the following error:
>>
>> BTRFS error (device dm-2): unable to fixup (regular) error at
>> logical 13631488 on dev /dev/mapper/test-scratch1 physical 13631488
>> BTRFS warning (device dm-2): checksum error at logical 13631488 on
>> dev /dev/mapper/test-scratch1, physical 13631488, root 5, inode 257,
>> offset 0, length 4096, links 1 (path: file1)
>>
>> On the other hand, "btrfs check --check-data-csum" is reporting the
>> correct logical/physical address:
>>
>> Checking filesystem on /dev/test/scratch1
>> UUID: db2eb621-b09d-4f24-8199-da17dc7b3201
>> [5/7] checking csums against data
>> mirror 1 bytenr 13647872 csum 0x13fec125 expected csum 0x656bd64e
>> ERROR: errors found in csum tree
>>
>> [CAUSE]
>> In the function scrub_stripe_report_errors(), we always use the
>> stripe->logical and its physical address to print the error message, not
>> taking the sector number into consideration at all.
>>
>> [FIX]
>> Fix the error reporting function by calculating logical/physical with
>> the sector number.
>>
>> Now the scrub report is correct:
>>
>> BTRFS error (device dm-2): unable to fixup (regular) error at
>> logical 13647872 on dev /dev/mapper/test-scratch1 physical 13647872
>> BTRFS warning (device dm-2): checksum error at logical 13647872 on
>> dev /dev/mapper/test-scratch1, physical 13647872, root 5, inode 257,
>> offset 16384, length 4096, links 1 (path: file1)
>>
>> Fixes: 0096580713ff ("btrfs: scrub: introduce error reporting
>> functionality for scrub_stripe")
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>
>
> To help accurate debug on stable kernel, we could also add
> CC: stable@vger.kernel.org #6.4+
IIRC Fixes: tag is more accurate than just CC stable, as stable has the
correct bots catching the fixes line.
Thanks,
Qu
>
> Not too particular though.
>
> Reviewed-by: Anand Jain <anand.jain@oracle.com>
>
> Thanks.
>
>
>> ---
>> fs/btrfs/scrub.c | 22 +++++++++++++---------
>> 1 file changed, 13 insertions(+), 9 deletions(-)
>>
>> diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
>> index fa25004ab04e..119e98797b21 100644
>> --- a/fs/btrfs/scrub.c
>> +++ b/fs/btrfs/scrub.c
>> @@ -870,7 +870,7 @@ static void scrub_stripe_report_errors(struct
>> scrub_ctx *sctx,
>> DEFAULT_RATELIMIT_BURST);
>> struct btrfs_fs_info *fs_info = sctx->fs_info;
>> struct btrfs_device *dev = NULL;
>> - u64 physical = 0;
>> + u64 stripe_physical = stripe->physical;
>> int nr_data_sectors = 0;
>> int nr_meta_sectors = 0;
>> int nr_nodatacsum_sectors = 0;
>> @@ -903,13 +903,17 @@ static void scrub_stripe_report_errors(struct
>> scrub_ctx *sctx,
>> */
>> if (ret < 0)
>> goto skip;
>> - physical = bioc->stripes[stripe_index].physical;
>> + stripe_physical = bioc->stripes[stripe_index].physical;
>> dev = bioc->stripes[stripe_index].dev;
>> btrfs_put_bioc(bioc);
>> }
>> skip:
>> for_each_set_bit(sector_nr, &stripe->extent_sector_bitmap,
>> stripe->nr_sectors) {
>> + u64 logical = stripe->logical +
>> + (sector_nr << fs_info->sectorsize_bits);
>> + u64 physical = stripe_physical +
>> + (sector_nr << fs_info->sectorsize_bits);
>> bool repaired = false;
>> if (stripe->sectors[sector_nr].is_metadata) {
>> @@ -938,12 +942,12 @@ static void scrub_stripe_report_errors(struct
>> scrub_ctx *sctx,
>> if (dev) {
>> btrfs_err_rl_in_rcu(fs_info,
>> "fixed up error at logical %llu on dev %s physical %llu",
>> - stripe->logical, btrfs_dev_name(dev),
>> + logical, btrfs_dev_name(dev),
>> physical);
>> } else {
>> btrfs_err_rl_in_rcu(fs_info,
>> "fixed up error at logical %llu on mirror %u",
>> - stripe->logical, stripe->mirror_num);
>> + logical, stripe->mirror_num);
>> }
>> continue;
>> }
>> @@ -952,26 +956,26 @@ static void scrub_stripe_report_errors(struct
>> scrub_ctx *sctx,
>> if (dev) {
>> btrfs_err_rl_in_rcu(fs_info,
>> "unable to fixup (regular) error at logical %llu on dev %s
>> physical %llu",
>> - stripe->logical, btrfs_dev_name(dev),
>> + logical, btrfs_dev_name(dev),
>> physical);
>> } else {
>> btrfs_err_rl_in_rcu(fs_info,
>> "unable to fixup (regular) error at logical %llu on mirror %u",
>> - stripe->logical, stripe->mirror_num);
>> + logical, stripe->mirror_num);
>> }
>> if (test_bit(sector_nr, &stripe->io_error_bitmap))
>> if (__ratelimit(&rs) && dev)
>> scrub_print_common_warning("i/o error", dev, false,
>> - stripe->logical, physical);
>> + logical, physical);
>> if (test_bit(sector_nr, &stripe->csum_error_bitmap))
>> if (__ratelimit(&rs) && dev)
>> scrub_print_common_warning("checksum error", dev,
>> false,
>> - stripe->logical, physical);
>> + logical, physical);
>> if (test_bit(sector_nr, &stripe->meta_error_bitmap))
>> if (__ratelimit(&rs) && dev)
>> scrub_print_common_warning("header error", dev, false,
>> - stripe->logical, physical);
>> + logical, physical);
>> }
>> spin_lock(&sctx->stat_lock);
>
>
next prev parent reply other threads:[~2024-03-14 20:15 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-14 9:50 [PATCH 0/6] btrfs: scrub: refine the error messages Qu Wenruo
2024-03-14 9:50 ` [PATCH 1/7] btrfs: scrub: fix incorrectly reported logical/physical address Qu Wenruo
2024-03-14 12:24 ` Anand Jain
2024-03-14 20:15 ` Qu Wenruo [this message]
2024-04-04 20:01 ` David Sterba
2024-03-14 17:10 ` Filipe Manana
2024-03-14 9:50 ` [PATCH 2/7] btrfs: reduce the log level for btrfs_dev_stat_inc_and_print() Qu Wenruo
2024-03-14 17:17 ` Filipe Manana
2024-03-14 20:26 ` Qu Wenruo
2024-03-18 19:54 ` Filipe Manana
2024-03-14 9:50 ` [PATCH 3/7] btrfs: scrub: remove unused is_super parameter from scrub_print_common_warning() Qu Wenruo
2024-03-14 17:19 ` Filipe Manana
2024-03-14 9:50 ` [PATCH 4/7] btrfs: scrub: remove unnecessary dev/physical lookup for scrub_stripe_report_errors() Qu Wenruo
2024-03-14 17:26 ` Filipe Manana
2024-03-14 20:28 ` Qu Wenruo
2024-03-18 16:16 ` Filipe Manana
2024-03-18 19:53 ` Qu Wenruo
2024-03-14 9:50 ` [PATCH 5/7] btrfs: scrub: simplify the inode iteration output Qu Wenruo
2024-03-14 17:29 ` Filipe Manana
2024-03-14 9:50 ` [PATCH 6/7] btrfs: scrub: unify and shorten the error message Qu Wenruo
2024-03-14 17:40 ` Filipe Manana
2024-03-14 20:56 ` Qu Wenruo
2024-03-18 16:26 ` Filipe Manana
2024-03-18 20:00 ` Qu Wenruo
2024-03-14 23:05 ` kernel test robot
2024-03-15 11:44 ` kernel test robot
2024-03-14 9:50 ` [PATCH 7/7] btrfs: scrub: fix the frequency of error messages Qu Wenruo
2024-03-14 17:51 ` Filipe Manana
2024-03-14 20:32 ` Qu Wenruo
2024-03-14 17:35 ` [PATCH 0/6] btrfs: scrub: refine the " Boris Burkov
2024-03-14 20:30 ` Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=822eeff3-3ba6-4d51-98a2-636036ca90b2@gmx.com \
--to=quwenruo.btrfs@gmx.com \
--cc=anand.jain@oracle.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=wqu@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox