From: Baokun Li <libaokun1@huawei.com>
To: Zorro Lang <zlang@redhat.com>
Cc: <fstests@vger.kernel.org>, <guaneryu@gmail.com>,
<amir73il@gmail.com>, <ritesh.list@gmail.com>,
<yangerkun@huawei.com>, Baokun Li <libaokun1@huawei.com>
Subject: Re: [PATCH] ext4: Regression test of ext4_lblk_t overflow
Date: Mon, 20 Nov 2023 11:44:17 +0800 [thread overview]
Message-ID: <a28b6f57-af85-e263-4733-dcb21048b696@huawei.com> (raw)
In-Reply-To: <20231119131427.topibmy2xdi36a7x@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com>
On 2023/11/19 21:14, Zorro Lang wrote:
> On Sat, Nov 18, 2023 at 11:08:10AM +0800, Baokun Li wrote:
>> On 2023/11/17 22:24, Zorro Lang wrote:
>>> Hi Baokun,
>>>
>>> Thanks for this new coverage, some review points as below ...
>>>
>> Hi Zorro,
>>
>> Thank you for your careful review!
>>
>>>> +
>>>> +# Initalize a 4k 100M ext4 fs
>>>> +dev_size=$((100 * 1024 * 1024))
>>>> +MKFS_OPTIONS="-b 4096 $MKFS_OPTIONS" _scratch_mkfs_sized $dev_size \
>>>> + >>$seqres.full 2>&1 || _fail "mkfs failed"
>>> Can we use bsize=$(_get_file_block_size ....) to get the real block size,
>>> to avoid use a specific mkfs option?
>>> If so, my second question is if this case can be a generic case. The test
>>> steps look common enough, I'm glad to see what will happen on other
>>> filesystems through this test.
>> The reason for specifying 4096 for formatting here is that mkfs.ext4
>> specifies a
>> default block size of 1024 when the disk image is 100M.
> Is the reproducer related with the block size. If it's not, we can use
> "bsize=$(_get_file_block_size $SCRATCH_MNT)" to get the block size, and change
> later 4096 to $bsize.
This problem is really hard to reproduce when the block size is 1024,
but the
good thing is that the default block size specified in
_scratch_mkfs_sized()
is 4096, so we can leave the block size of 4096 unspecified here.
>
>> Although these operations appear to be generic scenarios, the reproduction
>> of
>> this problem relies on ext4's pre-allocation mechanism. Block allocation
>> requests
>> are scaled up in ext4_mb_normalize_request(), and the extra blocks are used
>> for
>> preallocation to reduce fragmentation. Therefore, this test case is placed
>> only in
>> the ext4 test suite.
> Sure it's a reproducer for ext4, but it can be run for other filesystems
> which support falloc and finsert. And:
> _require_xfs_io_command "falloc"
> _require_xfs_io_command "finsert"
> will make sure the current FSTYP supports these two features. So it can
> be a bug coverage for ext4, and a generic test case for other fs.
Totally agree, I'll put it in generic test suite in next version, the
execution of
this use case takes only 1-2s, it doesn't seem to have any impact.
>>>> +
>>>> +_scratch_mount
>>>> +
>>>> +# Reserve 1M space
>>>> +$XFS_IO_PROG -f -c "falloc 0 1M" "${SCRATCH_MNT}/tmp" >> $seqres.full 2>&1
>>>> +
>>>> +# Create a file with logical block numbers close to overflow
>>>> +$XFS_IO_PROG -f -c "falloc 0 10M" "${SCRATCH_MNT}/file" >> $seqres.full 2>&1
>>>> +$XFS_IO_PROG -f -c "finsert 1M 16777203M" "${SCRATCH_MNT}/file" >> $seqres.full 2>&1
>>> _require_xfs_io_command "finsert"
>> Okay.
>>>> +
>>>> +# Filling up the free space ensures that the pre-allocated space is the reserved space.
>>>> +$XFS_IO_PROG -f -c "falloc 0 80388096" "${SCRATCH_MNT}/fill" >> $seqres.full 2>&1
>>> Can we make sure this step fill the whole free space? There's a helper in
>>> common/populate named _fill_fs, please check if it's what you want?
>> The remaining space for a 100M 4k ext4 image after the previous operations
>> is
>> 80388096, so we can confirm that we can fill the entire free space here.
>> Of course, using _fill_fs is also workable, but it's faster to do it in a
>> single fallocate.
> I'm not sure how the reservation works, if there're 90M free space, and you
> try to reserve 90+M, will once fallocate calling trys to reserve each free
> blocks, before returning error? If it's not, I think the _fill_fs might be
> what you want.
>
> Thanks,
> Zorro
ext4_fallocate will try to allocate all free blocks if the size to be
allocated exceeds
the free space on the filesystem, but will still return an error. I've
tested _fill_fs and
it works well too. I will use _fill_fs in the next release to make this
use case more generic.
Thanks!
--
With Best Regards,
Baokun Li
.
prev parent reply other threads:[~2023-11-20 3:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-28 7:01 [PATCH] ext4: Regression test of ext4_lblk_t overflow Baokun Li
2023-11-17 14:24 ` Zorro Lang
2023-11-18 3:08 ` Baokun Li
2023-11-19 13:14 ` Zorro Lang
2023-11-20 3:44 ` Baokun Li [this message]
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=a28b6f57-af85-e263-4733-dcb21048b696@huawei.com \
--to=libaokun1@huawei.com \
--cc=amir73il@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=guaneryu@gmail.com \
--cc=ritesh.list@gmail.com \
--cc=yangerkun@huawei.com \
--cc=zlang@redhat.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