Re: [PATCH] generic/211: verify if the filesystem being tested supports in place writes

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Wed, Jul 23, 2025 at 01:04:06PM +0100, fdmanana@xxxxxxxxxx wrote:
> From: Filipe Manana <fdmanana@xxxxxxxx>
> 
> The test currently assumes the filesystem can do in place writes (no
> Copy-On-Write, no allocation of new extents) when overwriting a file.
> While that is the case for most filesystems in most configurations, there
> are exceptions such as zoned xfs where overwriting results in allocating
> new extents for the new data.
> 
> So make the test check that in place writes are supported and skip the
> test if they are not supported.
> 
> Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx>
> ---
>  common/rc         | 59 +++++++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/211 |  1 +
>  2 files changed, 60 insertions(+)
> 
> diff --git a/common/rc b/common/rc
> index 96578d15..52aade10 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5873,6 +5873,65 @@ _require_program() {
>  	_have_program "$1" || _notrun "$tag required"
>  }
>  
> +# Test that a filesystem can do writes to a file in place (without allocating
> +# new extents, without Copy-On-Write semantics).
> +_require_inplace_writes()
> +{
> +	_require_xfs_io_command "fiemap"
> +
> +	local target=$1
> +	local test_file="${target}/test_inplace_writes"
> +	local fiemap_before
> +	local fiemap_after
> +
> +	if [ -z "$target" ]; then
> +		_fail "Usage: _require_inplace_writes <filesystem path>"
> +	fi
> +
> +	rm -f "$test_file"
> +	touch "$test_file"
> +
> +	# Set the file to NOCOW mode on btrfs, which must be done while the file
> +	# is empty, otherwise it fails.
> +	if [ "$FSTYP" == "btrfs" ]; then
> +		_require_chattr C
> +		$CHATTR_PROG +C "$test_file"
> +	fi

Can you factor this into a _force_inplace helper instead of spreading
file systems specific in random helpers (I know we have a few of those,
but we need to get rid of that to make things maintainable..)

> +	# If the filesystem supports inplace writes, then the extent mapping is
> +	# the same before and after overwriting.
> +	if [ "${fiemap_after}" != "${fiemap_before}" ]; then
> +		_notrun "inplace writes not supported"

I think in-place would be the more usual spelling instead of inplace.

Otherwise this looks great, thanks!




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux