On 2019/12/11 下午3:23, Anand Jain wrote:
>
>
> On 12/11/19 3:08 PM, Qu Wenruo wrote:
>>
>>
>> On 2019/12/11 下午2:08, Anand Jain wrote:
>>> We changed the order of the allocation on the devices, and
>>> so the test cases which are hard coded to find specific stripe
>>> on the specific device gets failed. So fix it with the new layout.
>>>
>>> Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx>
>>> ---
>>> Qu, Right we need to fix the dev in the test case as well.
>>> I saw your patches bit late. Here is what I had.. you may
>>> use it. So I am marking this patch as RFC.
>>
>> I am crafting a better solution, to handle both behavior (and even
>> future behavior), by getting both devid and physical offset.
>
> Yep helper function using either,
> devid and btrfs fi show
> or
> uuid and blkid
>
> would dynamically find the right device.
My current helper is going to rely on the fact that all mkfs.btrfs
assigned devid sequentially.
Which means "mkfs.btrfs -f $dev1 $dev2" will always assigned devid 1 to
$dev1, and devid 2 to $dev2.
As long as we don't touch that part, we should be OK.
(And I really hope we won't touch that part).
>
> I am ok with either.
>
>> And I tend to remove the fail_make_request requirement from some tests,
>> and direct read with multiple try should be enough to trigger repair for
>> test btrfs/142 and btrfs/143.
>>
>
>> In fact, I don't believe your current fix is good enough to handle both
>> old and new mkfs.btrfs.
>
> It was designed to handle only forward compatible.
Then both Oracle and SUSE QA people will hate such tests...
Thanks,
Qu
>
> Thanks, Anand
>
>> So we need to investigate more for raid repair test cases to make them
>> future proof.
>>
>> Thanks,
>> Qu
>>> Thanks.
>>>
>>> tests/btrfs/158 | 10 +++++-----
>>> tests/btrfs/158.out | 4 ++--
>>> 2 files changed, 7 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/tests/btrfs/158 b/tests/btrfs/158
>>> index 603e8bea9b7e..7f2066384f55 100755
>>> --- a/tests/btrfs/158
>>> +++ b/tests/btrfs/158
>>> @@ -76,14 +76,14 @@ _scratch_unmount
>>> stripe_0=`get_physical_stripe0`
>>> stripe_1=`get_physical_stripe1`
>>> -dev4=`echo $SCRATCH_DEV_POOL | awk '{print $4}'`
>>> -dev3=`echo $SCRATCH_DEV_POOL | awk '{print $3}'`
>>> +dev1=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
>>> +dev2=`echo $SCRATCH_DEV_POOL | awk '{print $2}'`
>>> # step 2: corrupt the 1st and 2nd stripe (stripe 0 and 1)
>>> -echo "step 2......simulate bitrot at offset $stripe_0 of
>>> device_4($dev4) and offset $stripe_1 of device_3($dev3)" >>$seqres.full
>>> +echo "step 2......simulate bitrot at offset $stripe_0 of
>>> device_1($dev1) and offset $stripe_1 of device_2($dev2)" >>$seqres.full
>>> -$XFS_IO_PROG -f -d -c "pwrite -S 0xbb $stripe_0 64K" $dev4 |
>>> _filter_xfs_io
>>> -$XFS_IO_PROG -f -d -c "pwrite -S 0xbb $stripe_1 64K" $dev3 |
>>> _filter_xfs_io
>>> +$XFS_IO_PROG -f -d -c "pwrite -S 0xbb $stripe_0 64K" $dev1 |
>>> _filter_xfs_io
>>> +$XFS_IO_PROG -f -d -c "pwrite -S 0xbb $stripe_1 64K" $dev2 |
>>> _filter_xfs_io
>>> # step 3: scrub filesystem to repair the bitrot
>>> echo "step 3......repair the bitrot" >> $seqres.full
>>> diff --git a/tests/btrfs/158.out b/tests/btrfs/158.out
>>> index 1f5ad3f76917..5cdaeb238c62 100644
>>> --- a/tests/btrfs/158.out
>>> +++ b/tests/btrfs/158.out
>>> @@ -1,9 +1,9 @@
>>> QA output created by 158
>>> wrote 131072/131072 bytes at offset 0
>>> XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>>> -wrote 65536/65536 bytes at offset 9437184
>>> +wrote 65536/65536 bytes at offset 22020096
>>> XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>>> -wrote 65536/65536 bytes at offset 9437184
>>> +wrote 65536/65536 bytes at offset 1048576
>>> XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>>> 0000000 aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
>>> *
>>>
>>
Attachment:
signature.asc
Description: OpenPGP digital signature
