Re: [PATCH] fstests: generic test for fsync after fallocate

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



On Mon, Apr 9, 2018 at 10:51 AM, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
> On Sun, Apr 08, 2018 at 10:07:54AM +0800, Eryu Guan wrote:
>> On Thu, Apr 05, 2018 at 10:56:14PM +0100, fdmanana@xxxxxxxxxx wrote:
>> > From: Filipe Manana <fdmanana@xxxxxxxx>
>> >
>> > Test that fsync operations preserve extents allocated with fallocate(2)
>> > that are placed beyond a file's size.
>> >
>> > This test is motivated by a bug found in btrfs where unwritten extents
>> > beyond the inode's i_size were not preserved after a fsync and power
>> > failure. The btrfs bug is fixed by the following patch for the linux
>> > kernel:
>> >
>> >  "Btrfs: fix loss of prealloc extents past i_size after fsync log replay"
>> >
>> > Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx>
>>
>> Hmm, xfs fails this test, while ext4 passes.
>>
>> # diff -u tests/generic/483.out /root/workspace/xfstests/results//xfs_4k_crc/generic/483.out.bad
>> --- tests/generic/483.out       2018-04-07 23:35:00.555555511 +0800
>> +++ /root/workspace/xfstests/results//xfs_4k_crc/generic/483.out.bad    2018-04-07 23:39:48.780659707 +0800
>> @@ -6,5 +6,5 @@
>>  0: [0..511]: data
>>  1: [512..2559]: unwritten
>>  File baz fiemap:
>> -0: [0..511]: data
>> -1: [512..6143]: unwritten
>> +0: [0..895]: data
>> +1: [896..6143]: unwritten
>
> Perfectly valid result from the test.

Still very surprising without knowing specifics about xfs (as you
describe below).

>
>> > +# A file which already has a prealloc extent beyond its size.
>> > +# The fsync done on it is motivated by differences in the btrfs implementation
>> > +# of fsync (first fsync has different logic from subsequent fsyncs).
>> > +$XFS_IO_PROG -f -c "pwrite -S 0xf1 0 256K" \
>> > +        -c "falloc -k 256K 768K" \
>> > +        -c "fsync" \
>> > +        $SCRATCH_MNT/baz >/dev/null
>
> Delayed allocation extending the file to 256k means we'll have
> speculative prealloc of data beyond 256k - it should be somewhere
> around 448k IIRC.
>
> Now, falloc doesn't guarantee unwritten extents are allocated - it
> just guarantees space is allocated. unwritten extents are an
> optimisation to avoid needing to zero the extents pre-allocated
> within EOF. i.e. we can quite safely allocate data extents beyond
> EOF rather than unwritten extents, and this is not a bug.
>
> In this case, the delalloc extent is completely allocated as written
> data, but nothing is written beyond EOF @ 256k.  Hence it reports as
> a data extent, not an unwritten extent, and this is a perfectly
> valid thing to do.
>
>> > +# Allocate another extent beyond the size of file baz.
>> > +$XFS_IO_PROG -c "falloc -k 1M 2M"\
>> > +        -c "fsync" \
>> > +        $SCRATCH_MNT/baz
>
> You also cannot assume that two separate preallocations beyond EOF
> are going to be contiguous (i.e. it could be two separate extents.

I really don't care about that.
Just want to check that allocated space is not lost, don't care if
that space is covered by 1, 2 or more extents, or whether they are
contiguous or not.
>
> What you should just be checking is that there are extents allocated
> covering EOF to 3MB, not the exactly size, shape and type of extents
> are allocated.

How to do such check, for a generic test, without using fiemap?

thanks

>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@xxxxxxxxxxxxx
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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