FS/XFS testing framework
 help / color / mirror / Atom feed
From: Zorro Lang <zlang@kernel.org>
To: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Cc: Zorro Lang <zlang@redhat.com>,
	fstests@vger.kernel.org,  Disha Goel <disgoel@linux.ibm.com>
Subject: Re: [PATCH v2] ext4/307: Calculate donor size to avoid failures for 64k bs
Date: Sat, 16 May 2026 00:26:33 +0800	[thread overview]
Message-ID: <agdJEsrKflGff5wq@zlang-mailbox> (raw)
In-Reply-To: <20260401100941.76082-1-ojaswin@linux.ibm.com>

On Wed, Apr 01, 2026 at 03:39:41PM +0530, Ojaswin Mujoo wrote:
> Calculating size of donor file based on du output causes the following
> issue:
> 
> e4compact.c:68: do_defrag_range: Assertion `donor->length >= len' failed.
> ./common/rc: line 4616: 1583182 Aborted                 (core dumped)
> 
> The issue is that e4compat asserts that the stat.st_size of all files
> combined shouldn't be more than that of the donor file. In case of 64k
> blocksize, fsstress often creates sparse files which have >3G size even
> though their disk utilization is <100M. Since donor file is not big
> enough, this trips e4compat causing the failure.
> 
> Fix this by using stat.st_size rather than du value to get the size.
> Also, make some changes to avoid future ENOSPC like reducing the -n
> passed to fsstress to keep the size around 2G and making sure we use the
> whole SCRATCH disk instead of 500M.
> 
> While we are at it, add some new lines to make the code bit more
> readable.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Tested-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> ---

It tests good to me,
Reviewed-by: Zorro Lang <zlang@kernel.org>

>  tests/ext4/307 | 18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/ext4/307 b/tests/ext4/307
> index 48073347..ed6fc664 100755
> --- a/tests/ext4/307
> +++ b/tests/ext4/307
> @@ -19,18 +19,26 @@ _workout()
>  	echo ""
>  	echo "Run fsstress"
>  	out=$SCRATCH_MNT/fsstress.$$
> -	args=`_scale_fsstress_args -p4 -n999 -f setattr=1 -d $out`
> +	args=`_scale_fsstress_args -p4 -n500 -f setattr=1 -d $out`
>  	echo "fsstress $args" >> $seqres.full
>  	_run_fsstress $args
> +
>  	find $out -type f > $out.list
>  	cat $out.list | xargs  md5sum > $out.md5sum
> -	# Use -m to get integer MB size to avoid decimals (e.g. 1.5M) which xfs_io rejects
> -	usage=$(du -sm $out | awk '{print $1}')
> +
> +	# Get the total of stat.st_size of each file to determine the
> +	# size of donor file. We use st_size here instead of blocks used
> +	# because thats what e4compat.c checks against.
> +	bytes=$(xargs -r stat -c %s < $out.list | awk '{s+=$1} END{print s}')
> +	echo "Total bytes used: $bytes" >> $seqres.full
> +
>  	echo "Allocate donor file"
> -	$XFS_IO_PROG -c "falloc 0 ${usage}m" -f $SCRATCH_MNT/donor | _filter_xfs_io
> +	$XFS_IO_PROG -c "falloc 0 $bytes" -f $SCRATCH_MNT/donor | _filter_xfs_io
> +
>  	echo "Perform compacting"
>  	cat $out.list | run_check $here/src/e4compact \
>  		-i -v -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
> +
>  	echo "Check data"
>  	run_check md5sum -c $out.md5sum
>  }
> @@ -42,7 +50,7 @@ _require_scratch
>  _require_defrag
>  _require_xfs_io_command "falloc"
>  
> -_scratch_mkfs_sized $((512 * 1024 * 1024)) >> $seqres.full 2>&1
> +_scratch_mkfs >> $seqres.full 2>&1
>  _scratch_mount
>  
>  _workout
> -- 
> 2.52.0
> 
> 

      reply	other threads:[~2026-05-15 16:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-01 10:09 [PATCH v2] ext4/307: Calculate donor size to avoid failures for 64k bs Ojaswin Mujoo
2026-05-15 16:26 ` Zorro Lang [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=agdJEsrKflGff5wq@zlang-mailbox \
    --to=zlang@kernel.org \
    --cc=disgoel@linux.ibm.com \
    --cc=fstests@vger.kernel.org \
    --cc=ojaswin@linux.ibm.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