From: Anand Jain <anand.jain@oracle.com>
To: Naohiro Aota <Naohiro.Aota@wdc.com>,
Johannes Thumshirn <jth@kernel.org>,
Zorro Lang <zlang@redhat.com>, Filipe Manana <fdmanana@suse.com>
Cc: "fstests@vger.kernel.org" <fstests@vger.kernel.org>,
"linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>,
Johannes Thumshirn <Johannes.Thumshirn@wdc.com>
Subject: Re: [PATCH v4] fstests: btrfs: zoned: verify RAID conversion with write pointer mismatch
Date: Fri, 28 Mar 2025 00:11:00 +0800 [thread overview]
Message-ID: <d6b2158c-afde-4b4c-9ec4-44b38c0ddade@oracle.com> (raw)
In-Reply-To: <D8Q8M54FIFKG.34J9M1WWISFNR@wdc.com>
On 26/3/25 21:39, Naohiro Aota wrote:
> On Wed Mar 19, 2025 at 7:09 AM EDT, Johannes Thumshirn wrote:
>> From: Johannes Thumshirn <johannes.thumshirn@wdc.com>
>>
>> Recently we had a bug report about a kernel crash that happened when the
>> user was converting a filesystem to use RAID1 for metadata, but for some
>> reason the device's write pointers got out of sync.
>>
>> Test this scenario by manually injecting de-synchronized write pointer
>> positions and then running conversion to a metadata RAID1 filesystem.
>>
>> In the testcase also repair the broken filesystem and check if both system
>> and metadata block groups are back to the default 'DUP' profile
>> afterwards.
>>
>> Link: https://lore.kernel.org/linux-btrfs/CAB_b4sBhDe3tscz=duVyhc9hNE+gu=B8CrgLO152uMyanR8BEA@mail.gmail.com/
>> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
>> Reviewed-by: Filipe Manana <fdmanana@suse.com>
>> ---
>> Changes to v3:
>> - Limit number of dirtied zones to 64
>> Changes to v2:
>> - Filter SCRATCH_MNT in golden output
>> Changes to v1:
>> - Add test description
>> - Don't redirect stderr to $seqres.full
>> - Use xfs_io instead of dd
>> - Use $SCRATCH_MNT instead of hardcoded mount path
>> - Check that 1st balance command actually fails as it's supposed to
>> ---
>> tests/btrfs/329 | 68 +++++++++++++++++++++++++++++++++++++++++++++
>> tests/btrfs/329.out | 7 +++++
>> 2 files changed, 75 insertions(+)
>> create mode 100755 tests/btrfs/329
>> create mode 100644 tests/btrfs/329.out
>>
>> diff --git a/tests/btrfs/329 b/tests/btrfs/329
>> new file mode 100755
>> index 000000000000..24d34852db1f
>> --- /dev/null
>> +++ b/tests/btrfs/329
>> @@ -0,0 +1,68 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2025 Western Digital Corporation. All Rights Reserved.
>> +#
>> +# FS QA Test 329
>> +#
>> +# Regression test for a kernel crash when converting a zoned BTRFS from
>> +# metadata DUP to RAID1 and one of the devices has a non 0 write pointer
>> +# position in the target zone.
>> +#
>> +. ./common/preamble
>> +_begin_fstest zone quick volume
>> +
>> +. ./common/filter
>> +
>> +_fixed_by_kernel_commit XXXXXXXXXXXX \
>> + "btrfs: zoned: return EIO on RAID1 block group write pointer mismatch"
>> +
>> +_require_scratch_dev_pool 2
>> +declare -a devs="( $SCRATCH_DEV_POOL )"
>> +_require_zoned_device ${devs[0]}
>> +_require_zoned_device ${devs[1]}
>> +_require_command "$BLKZONE_PROG" blkzone
>> +
>> +_scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
>> +_scratch_mount
>> +
>> +# Write some data to the FS to dirty it
>> +$XFS_IO_PROG -fc "pwrite 0 128M" $SCRATCH_MNT/test | _filter_xfs_io
>> +
>> +# Add device two to the FS
>> +$BTRFS_UTIL_PROG device add ${devs[1]} $SCRATCH_MNT >> $seqres.full
>> +
>> +# Move write pointers of all empty zones by 4k to simulate write pointer
>> +# mismatch.
>> +
>> +nzones=$($BLKZONE_PROG report ${devs[1]} | wc -l)
>> +if [ $nzones -gt 64 ]; then
>> + nzones=64
>> +fi
>
> Nit: We can just do "nzones=64" as "head" just pass through all the line if the
> number of zone is less that.
>
The `%nzones` variable can also be removed entirely.
diff --git a/tests/btrfs/329 b/tests/btrfs/329
index 24d34852db1f..1c9b95f350a6 100755
--- a/tests/btrfs/329
+++ b/tests/btrfs/329
@@ -33,14 +33,8 @@ $BTRFS_UTIL_PROG device add ${devs[1]} $SCRATCH_MNT
>> $seqres.full
# Move write pointers of all empty zones by 4k to simulate write pointer
# mismatch.
-
-nzones=$($BLKZONE_PROG report ${devs[1]} | wc -l)
-if [ $nzones -gt 64 ]; then
- nzones=64
-fi
-
zones=$($BLKZONE_PROG report ${devs[1]} | $AWK_PROG '/em/ { print $2 }' |\
- sed 's/,//' | head -n $nzones)
+ sed 's/,//' | head -n 64)
for zone in $zones;
do
# We have to ignore the output here, as a) we don't know the
number of
> Other than that nit:
>
> Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com>
Added.
Thanks, Anand
>
>> +
>> +zones=$($BLKZONE_PROG report ${devs[1]} | $AWK_PROG '/em/ { print $2 }' |\
>> + sed 's/,//' | head -n $nzones)
>> +for zone in $zones;
>> +do
>> + # We have to ignore the output here, as a) we don't know the number of
>> + # zones that have dirtied and b) if we run over the maximal number of
>> + # active zones, xfs_io will output errors, both we don't care.
>> + $XFS_IO_PROG -fdc "pwrite $(($zone << 9)) 4096" ${devs[1]} > /dev/null 2>&1
>> +done
>> +
>> +# expected to fail
>> +$BTRFS_UTIL_PROG balance start -mconvert=raid1 $SCRATCH_MNT 2>&1 |\
>> + _filter_scratch
>> +
>> +_scratch_unmount
>> +
>> +$MOUNT_PROG -t btrfs -odegraded ${devs[0]} $SCRATCH_MNT
>> +
>> +$BTRFS_UTIL_PROG device remove --force missing $SCRATCH_MNT >> $seqres.full
>> +$BTRFS_UTIL_PROG balance start --full-balance $SCRATCH_MNT >> $seqres.full
>> +
>> +# Check that both System and Metadata are back to the DUP profile
>> +$BTRFS_UTIL_PROG filesystem df $SCRATCH_MNT |\
>> + grep -o -e "System, DUP" -e "Metadata, DUP"
>> +
>> +status=0
>> +exit
>> diff --git a/tests/btrfs/329.out b/tests/btrfs/329.out
>> new file mode 100644
>> index 000000000000..e47a2a6ff04b
>> --- /dev/null
>> +++ b/tests/btrfs/329.out
>> @@ -0,0 +1,7 @@
>> +QA output created by 329
>> +wrote 134217728/134217728 bytes at offset 0
>> +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>> +ERROR: error during balancing 'SCRATCH_MNT': Input/output error
>> +There may be more info in syslog - try dmesg | tail
>> +System, DUP
>> +Metadata, DUP
prev parent reply other threads:[~2025-03-27 16:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 11:09 [PATCH v4] fstests: btrfs: zoned: verify RAID conversion with write pointer mismatch Johannes Thumshirn
2025-03-25 10:52 ` Anand Jain
2025-03-26 13:39 ` Naohiro Aota
2025-03-27 16:11 ` Anand Jain [this message]
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=d6b2158c-afde-4b4c-9ec4-44b38c0ddade@oracle.com \
--to=anand.jain@oracle.com \
--cc=Johannes.Thumshirn@wdc.com \
--cc=Naohiro.Aota@wdc.com \
--cc=fdmanana@suse.com \
--cc=fstests@vger.kernel.org \
--cc=jth@kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=zlang@redhat.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