linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Mark Harmstone <maharmstone@meta.com>, Qu Wenruo <wqu@suse.com>,
	"linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>,
	"fstests@vger.kernel.org" <fstests@vger.kernel.org>,
	Boris Burkov <boris@bur.io>
Subject: Re: [PATCH] fstests: generic/563: use fs blocksize to do the writes
Date: Fri, 4 Oct 2024 19:22:55 +0930	[thread overview]
Message-ID: <509d89fa-56a2-4c01-bd3a-828e00e7a314@gmx.com> (raw)
In-Reply-To: <805c5e48-050e-48b2-be53-1a2f0fa4a088@meta.com>



在 2024/10/4 19:15, Mark Harmstone 写道:
> On 30/9/24 00:50, Qu Wenruo wrote:
>>>
>> [FALSE ALERTS]
>> If the system has a page size larger than 4K, and the fs block size
>> matches the page size, test case generic/563 will fail:
>>
>>       --- tests/generic/563.out	2024-04-25 18:13:45.178550333 +0930
>>       +++ /home/adam/xfstests-dev/results//generic/563.out.bad	2024-09-30 09:09:16.155312379 +0930
>>       @@ -3,7 +3,8 @@
>>        read is in range
>>        write is in range
>>        write -> read/write
>>       -read is in range
>>       +read has value of 8388608
>>       +read is NOT in range -33792 .. 33792
>>        write is in range
>>       ...
>>
>> Both Ext4 and btrfs fail with 64K block size and 64K page size
>>
>> [CAUSE]
>> The test case writes the 8MiB file using the default block size xfs_io
>> pwrite, which is 4KiB.
>>
>> Since the fs block size is 64K, such 4KiB write is unaligned inside a
>> block, causing the fs to read out the full page.
>>
>> Thus the pwrite will cause the fs to read out every page, resulting the
>> above 8MiB+ read value.
>>
>> [FIX]
>> Fix the test case by using the fs block size to avoid such unaligned
>> buffered write.
>>
>
> I ran generic/563 on a Raspberry Pi running 6.4 and with a 64K page
> size, and got a similar error:
>
> FSTYP         -- btrfs
> PLATFORM      -- Linux/aarch64 fstests-aarch64 6.4.3-arm64-g0ef0e2e48724
> #61 SMP Tue Aug  6 16:51:45 BST 2024
> MKFS_OPTIONS  -- /dev/vdc
> MOUNT_OPTIONS -- /dev/vdc /mnt/scratch-dir
>
> generic/563       - output mismatch (see
> /root/xfstests/results//generic/563.out.bad)
>       --- tests/generic/563.out   2024-08-05 10:33:23.000000000 -0000
>       +++ /root/xfstests/results//generic/563.out.bad     2024-10-04
> 09:35:51.433413098 -0000
>       @@ -3,7 +3,8 @@
>        read is in range
>        write is in range
>        write -> read/write
>       -read is in range
>       +read has value of 8421376
>       +read is NOT in range -33792 .. 33792
>        write is in range
>       ...
>       (Run 'diff -u /root/xfstests/tests/generic/563.out
> /root/xfstests/results//generic/563.out.bad'  to see the entire diff)
> Ran: generic/563
> Failures: generic/563
> Failed 1 of 1 tests
>
> The same happens whether the btrfs volume has a sector size of 4K or
> 64K, and the patch doesn't seem to fix it.

For 4K sector size 64K page size btrfs, it needs several kernel patches
to proper fix it.
(https://github.com/adam900710/linux/tree/subpage_read)


The above case only shows the 4K sector size case (the new default of
mkfs.btrfs, no matter page size now).

For 64K sectorsize with 64K page size case, you need to specify the "-s
64K" mkfs option, apply the patch, only after that the test can pass:

Unpatched:

FSTYP         -- btrfs
PLATFORM      -- Linux/aarch64 btrfs-aarch64 6.11.0-rc7-custom+ #70 SMP
PREEMPT_DYNAMIC Thu Oct  3 07:25:40 ACST 2024
MKFS_OPTIONS  -- -s 64k /dev/mapper/test-scratch1
MOUNT_OPTIONS -- /dev/mapper/test-scratch1 /mnt/scratch

generic/563 4s ... - output mismatch (see
/home/adam/xfstests-dev/results//generic/563.out.bad)
     --- tests/generic/563.out	2024-04-25 18:13:45.178550333 +0930
     +++ /home/adam/xfstests-dev/results//generic/563.out.bad	2024-10-04
19:19:19.699153483 +0930
     @@ -3,7 +3,8 @@
      read is in range
      write is in range
      write -> read/write
     -read is in range
     +read has value of 8388608
     +read is NOT in range -33792 .. 33792
      write is in range
     ...
     (Run 'diff -u /home/adam/xfstests-dev/tests/generic/563.out
/home/adam/xfstests-dev/results//generic/563.out.bad'  to see the entire
diff)
Ran: generic/563
Failures: generic/563
Failed 1 of 1 tests

Patched:

FSTYP         -- btrfs
PLATFORM      -- Linux/aarch64 btrfs-aarch64 6.11.0-rc7-custom+ #70 SMP
PREEMPT_DYNAMIC Thu Oct  3 07:25:40 ACST 2024
MKFS_OPTIONS  -- -s 64k /dev/mapper/test-scratch1
MOUNT_OPTIONS -- /dev/mapper/test-scratch1 /mnt/scratch

generic/563 4s ...  1s
Ran: generic/563
Passed all 1 tests


You can also do the same using ext4:

Unpatched:

FSTYP         -- ext4
PLATFORM      -- Linux/aarch64 btrfs-aarch64 6.11.0-rc7-custom+ #70 SMP
PREEMPT_DYNAMIC Thu Oct  3 07:25:40 ACST 2024
MKFS_OPTIONS  -- -F -b 64k /dev/mapper/test-scratch1
MOUNT_OPTIONS -- -o acl,user_xattr /dev/mapper/test-scratch1 /mnt/scratch

generic/563 1s ... - output mismatch (see
/home/adam/xfstests-dev/results//generic/563.out.bad)
     --- tests/generic/563.out	2024-04-25 18:13:45.178550333 +0930
     +++ /home/adam/xfstests-dev/results//generic/563.out.bad	2024-10-04
19:21:23.377651352 +0930
     @@ -3,7 +3,8 @@
      read is in range
      write is in range
      write -> read/write
     -read is in range
     +read has value of 8388608
     +read is NOT in range -33792 .. 33792
      write is in range
     ...
     (Run 'diff -u /home/adam/xfstests-dev/tests/generic/563.out
/home/adam/xfstests-dev/results//generic/563.out.bad'  to see the entire
diff)
Ran: generic/563
Failures: generic/563
Failed 1 of 1 tests

Patched:

FSTYP         -- ext4
PLATFORM      -- Linux/aarch64 btrfs-aarch64 6.11.0-rc7-custom+ #70 SMP
PREEMPT_DYNAMIC Thu Oct  3 07:25:40 ACST 2024
MKFS_OPTIONS  -- -F -b 64k /dev/mapper/test-scratch1
MOUNT_OPTIONS -- -o acl,user_xattr /dev/mapper/test-scratch1 /mnt/scratch

generic/563 1s ...  1s
Ran: generic/563
Passed all 1 tests


Mind to re-verify with the proper mkfs options?

Thanks,
Qu
>
> Mark
>


  reply	other threads:[~2024-10-04  9:53 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-29 23:50 [PATCH] fstests: generic/563: use fs blocksize to do the writes Qu Wenruo
2024-10-03 19:15 ` Boris Burkov
2024-10-04  9:45 ` Mark Harmstone
2024-10-04  9:52   ` Qu Wenruo [this message]
2024-10-04 11:18     ` Mark Harmstone
2024-10-09  9:28 ` Qu Wenruo
2024-10-10  6:43   ` Zorro Lang

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=509d89fa-56a2-4c01-bd3a-828e00e7a314@gmx.com \
    --to=quwenruo.btrfs@gmx.com \
    --cc=boris@bur.io \
    --cc=fstests@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=maharmstone@meta.com \
    --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;
as well as URLs for NNTP newsgroup(s).