All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.