Re: [PATCH] generic/471: adapt test when running on btrfs to avoid failure on RWF_NOWAIT write

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]




On 2020/6/15 下午7:53, Filipe Manana wrote:
> On Sun, Jun 14, 2020 at 6:14 AM Qu Wenruo <quwenruo.btrfs@xxxxxxx> wrote:
>>
>>
>>
>> On 2020/6/12 下午10:06, fdmanana@xxxxxxxxxx wrote:
>>> From: Filipe Manana <fdmanana@xxxxxxxx>
>>>
>>> This test currently always fails on btrfs:
>>>
>>> generic/471 2s ... - output mismatch (see ...results//generic/471.out.bad)
>>>     --- tests/generic/471.out   2020-06-10 19:29:03.850519863 +0100
>>>     +++ /home/fdmanana/git/hub/xfstests/results//generic/471.out.bad   ...
>>>     @@ -2,12 +2,10 @@
>>>      pwrite: Resource temporarily unavailable
>>>      wrote 8388608/8388608 bytes at offset 0
>>>      XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>>>     -RWF_NOWAIT time is within limits.
>>>     +pwrite: Resource temporarily unavailable
>>>     +(standard_in) 1: syntax error
>>>     +RWF_NOWAIT took  seconds
>>>
>>> This is because btrfs is a COW filesystem and an attempt to write into a
>>> previously written file range allocating a new extent (or multiple).
>>> The only exceptions are when attempting to write to a file range with a
>>> preallocated/unwritten extent or when writing to a NOCOW file that has
>>> extents allocated in the target range already.
>>>
>>> The test currently expects that writing into a previously written file
>>> range succeeds, but that is not true on btrfs since we are not dealing
>>> with a NOCOW file. So to make the test pass on btrfs, set the NOCOW bit
>>> on the file when the filesystem is btrfs.
>>
>> Completely agree with the point for btrfs.
>>
>>>
>>> Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx>
>>> ---
>>>  tests/generic/471 | 11 +++++++++++
>>>  1 file changed, 11 insertions(+)
>>>
>>> diff --git a/tests/generic/471 b/tests/generic/471
>>> index 7513f023..e9856b52 100755
>>> --- a/tests/generic/471
>>> +++ b/tests/generic/471
>>> @@ -37,6 +37,17 @@ fi
>>>
>>>  mkdir $testdir
>>>
>>> +# Btrfs is a COW filesystem, so a RWF_NOWAIT write will always fail with -EAGAIN
>>> +# when writing to a file range except if it's a NOCOW file and an extent for the
>>> +# range already exists or if it's a COW file and preallocated/unwritten extent
>>> +# exists in the target range. So to make sure that the last write succeeds on
>>> +# all filesystems, use a NOCOW file on btrfs.
>>> +if [ $FSTYP == "btrfs" ]; then
>>
>> Although I'm not sure if really only specific to btrfs.
>> XFS has its always_cow sysfs interface to make data write to always do
>> COW, just like what btrfs do by default.
>>
>> Thus I believe this may be needed for all fses, and just ignore the
>> error if the fs doesn't support COW.
> 
> I don't understand your point.
> If that flag is enabled on xfs (iirc it's a debug flag), the test
> would fail on xfs even if we attempt chattr +C (afaics xfs doesn't
> support +C).

Oh, my fault. Didn't know that xfs won't support chattr +C.

Then forget the comment.

Thanks,
Qu
> So I don't see the benefit of always doing it.
> 
> Thanks.
> 
> 
>>
>> Thanks,
>> Qu
>>
>>> +     _require_chattr C
>>> +     touch $testdir/f1
>>> +     $CHATTR_PROG +C $testdir/f1
>>> +fi
>>> +
>>>  # Create a file with pwrite nowait (will fail with EAGAIN)
>>>  $XFS_IO_PROG -f -d -c "pwrite -N -V 1 -b 1M 0 1M" $testdir/f1
>>>
>>>
>>

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux