From: Qu Wenruo <wqu@suse.com>
To: "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com>,
fstests@vger.kernel.org
Cc: linux-btrfs@vger.kernel.org, ritesh.list@gmail.com,
ojaswin@linux.ibm.com, djwong@kernel.org, zlang@kernel.org,
fdmanana@kernel.org, quwenruo.btrfs@gmx.com
Subject: Re: [PATCH v2 2/4] generic/274: Make the pwrite block sizes and offsets to 64k
Date: Wed, 20 Aug 2025 07:39:09 +0930 [thread overview]
Message-ID: <0a10a9b0-a55c-4607-be0b-7f7f01c2d729@suse.com> (raw)
In-Reply-To: <49bd135f95d50fd4b8db41593551b1958ed380a7.1755604735.git.nirjhar.roy.lists@gmail.com>
在 2025/8/19 21:30, Nirjhar Roy (IBM) 写道:
> This test was written with 4k block size in mind and it fails with
> 64k block size when tested with btrfs.
> The test first does pre-allocation, then fills up the
> filesystem. After that it tries to fragment and fill holes at offsets
> of 4k(i.e, 1 fsblock) - which works fine with 4k block size, but with
> 64k block size, the test tries to fragment and fill holes within
> 1 fsblock(of size 64k). This results in overwrite of 64k fsblocks
> and the write fails. The reason for this failure is that during
> overwrite, there is no more space available for COW.
> Fix this by changing the pwrite block size and offsets to 64k
> so that the test never tries to punch holes or overwrite within 1 fsblock
> and the test becomes compatible with all block sizes.
>
> For non-COW filesystems/files, this test should work even if the
> underlying filesytem block size > 64k.
>
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Overall looks good to me.
Although still a minor concern inlined below.
[...]>
> # Fill the rest of the fs completely
> # Note, this will show ENOSPC errors in $seqres.full, that's ok.
> echo "Fill fs with 1M IOs; ENOSPC expected" >> $seqres.full
> dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seqres.full 2>&1
> -echo "Fill fs with 4K IOs; ENOSPC expected" >> $seqres.full
> -dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seqres.full 2>&1
> +echo "Fill fs with 64K IOs; ENOSPC expected" >> $seqres.full
> +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=64K >>$seqres.full 2>&1
Not sure if using 64K block size to fill the fs is the correct way.
For example on a fs with 4K block size, but at end of filling there are
only 60K left.
This will fail the filling as we can not reserve 64K data space anymore.
But it's not 100% filling the data space either.
This may not matter that much as in the preallocated filling stage,
every operation is still in 64K block size though.
I'd prefer to keep the old 4K as block size (as it's the minimal support
one), or use the fs block size for filling.
This will ensure we really use up all the data space.
Thanks,
Qu
> _scratch_sync
> # Last effort, use O_SYNC
> -echo "Fill fs with 4K DIOs; ENOSPC expected" >> $seqres.full
> -dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seqres.full 2>&1
> +echo "Fill fs with 64K DIOs; ENOSPC expected" >> $seqres.full
> +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=64K oflag=sync >>$seqres.full 2>&1
> # Save space usage info
> echo "Post-fill space:" >> $seqres.full
> df $SCRATCH_MNT >>$seqres.full 2>&1
> @@ -63,7 +63,7 @@ df $SCRATCH_MNT >>$seqres.full 2>&1
> echo "Fill in prealloc space; fragment at offsets:" >> $seqres.full
> for i in `seq 1 2 1023`; do
> echo -n "$i " >> $seqres.full
> - dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \
> + dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=64K count=1 conv=notrunc \
> >>$seqres.full 2>/dev/null || _fail "failed to write to test file"
> done
> _scratch_sync
> @@ -71,7 +71,7 @@ echo >> $seqres.full
> echo "Fill in prealloc space; fill holes at offsets:" >> $seqres.full
> for i in `seq 2 2 1023`; do
> echo -n "$i " >> $seqres.full
> - dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \
> + dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=64K count=1 conv=notrunc \
> >>$seqres.full 2>/dev/null || _fail "failed to fill test file"
> done
> _scratch_sync
next prev parent reply other threads:[~2025-08-19 22:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-19 12:00 [PATCH v2 0/4] btrfs: Misc test fixes for large block/node sizes Nirjhar Roy (IBM)
2025-08-19 12:00 ` [PATCH v2 1/4] btrfs/301: Make the test compatible with all the supported block sizes Nirjhar Roy (IBM)
2025-08-19 21:59 ` Qu Wenruo
2025-08-19 12:00 ` [PATCH v2 2/4] generic/274: Make the pwrite block sizes and offsets to 64k Nirjhar Roy (IBM)
2025-08-19 22:09 ` Qu Wenruo [this message]
2025-08-20 4:36 ` Nirjhar Roy (IBM)
2025-08-19 12:00 ` [PATCH v2 3/4] btrfs/137: Make this test compatible with all supported block sizes Nirjhar Roy (IBM)
2025-08-19 22:10 ` Qu Wenruo
2025-08-19 12:00 ` [PATCH v2 4/4] generic/563: Increase the iosize to to cover for btrfs Nirjhar Roy (IBM)
2025-08-19 22:29 ` Qu Wenruo
2025-08-20 5:00 ` Nirjhar Roy (IBM)
2025-08-20 5:45 ` Qu Wenruo
2025-08-20 8:00 ` Nirjhar Roy (IBM)
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=0a10a9b0-a55c-4607-be0b-7f7f01c2d729@suse.com \
--to=wqu@suse.com \
--cc=djwong@kernel.org \
--cc=fdmanana@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=nirjhar.roy.lists@gmail.com \
--cc=ojaswin@linux.ibm.com \
--cc=quwenruo.btrfs@gmx.com \
--cc=ritesh.list@gmail.com \
--cc=zlang@kernel.org \
/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