From: Hans Holmberg <Hans.Holmberg@xxxxxxx> Test that we can gracefully handle spurious zone write pointer advancements while unmounted. Any space covered by the wp unexpectedly moving forward should just be treated as unused space, so check that we can still mount the file system and that the zone will be reset when all used blocks have been freed. Signed-off-by: Hans Holmberg <hans.holmberg@xxxxxxx> Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- tests/xfs/4214 | 61 ++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/4214.out | 2 ++ 2 files changed, 63 insertions(+) create mode 100755 tests/xfs/4214 create mode 100644 tests/xfs/4214.out diff --git a/tests/xfs/4214 b/tests/xfs/4214 new file mode 100755 index 000000000000..3e73a54614d5 --- /dev/null +++ b/tests/xfs/4214 @@ -0,0 +1,61 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Western Digital Corporation. All Rights Reserved. +# +# FS QA Test 4214 +# +# Test that we can gracefully handle spurious zone write pointer +# advancements while unmounted. +# + +. ./common/preamble +_begin_fstest auto quick zone + +# Import common functions. +. ./common/filter +. ./common/zoned + +_require_scratch +_require_zoned_device $SCRATCH_RTDEV +_require_command "$BLKZONE_PROG" blkzone + +_scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed" +_scratch_mount +blksz=$(_get_file_block_size $SCRATCH_MNT) + +test_file=$SCRATCH_MNT/test.dat +dd if=/dev/zero of=$test_file bs=1M count=16 >> $seqres.full 2>&1 \ + oflag=direct || _fail "file creation failed" + +_scratch_unmount + +# +# Figure out which zone was opened to store the test file and where +# the write pointer is in that zone +# +open_zone=$($BLKZONE_PROG report $SCRATCH_RTDEV | \ + $AWK_PROG '/oi/ { print $2 }' | sed 's/,//') +open_zone_wp=$($BLKZONE_PROG report $SCRATCH_RTDEV | \ + grep "start: $open_zone" | $AWK_PROG '{ print $8 }') +wp=$(( $open_zone + $open_zone_wp )) + +# Advance the write pointer manually by one block +dd if=/dev/zero of=$SCRATCH_RTDEV bs=$blksz count=1 seek=$(($wp * 512 / $blksz))\ + oflag=direct >> $seqres.full 2>&1 || _fail "wp advancement failed" + +_scratch_mount +_scratch_unmount + +# Finish the open zone +$BLKZONE_PROG finish -c 1 -o $open_zone $SCRATCH_RTDEV + +_scratch_mount +rm $test_file +_scratch_unmount + +# The previously open zone, now finished and unused, should have been reset +nr_open=$($BLKZONE_PROG report $SCRATCH_RTDEV | grep -wc "oi") +echo "Number of open zones: $nr_open" + +status=0 +exit diff --git a/tests/xfs/4214.out b/tests/xfs/4214.out new file mode 100644 index 000000000000..a746546bc8f6 --- /dev/null +++ b/tests/xfs/4214.out @@ -0,0 +1,2 @@ +QA output created by 4214 +Number of open zones: 0 -- 2.47.2