From: Christoph Hellwig <hch@lst.de>
To: Zorro Lang <zlang@kernel.org>
Cc: "Darrick J. Wong" <djwong@kernel.org>,
Hans Holmberg <hans.holmberg@wdc.com>,
fstests@vger.kernel.org, linux-xfs@vger.kernel.org,
Hans Holmberg <Hans.Holmberg@wdc.com>
Subject: [PATCH 16/16] xfs: test that we can handle spurious zone wp advancements
Date: Thu, 8 May 2025 07:34:45 +0200 [thread overview]
Message-ID: <20250508053454.13687-17-hch@lst.de> (raw)
In-Reply-To: <20250508053454.13687-1-hch@lst.de>
From: Hans Holmberg <Hans.Holmberg@wdc.com>
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@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
tests/xfs/4214 | 71 ++++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/4214.out | 2 ++
2 files changed, 73 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..f5262a40b229
--- /dev/null
+++ b/tests/xfs/4214
@@ -0,0 +1,71 @@
+#! /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/zoned
+
+_require_scratch
+_require_realtime
+
+#
+# Figure out if the rt section is internal or not
+#
+if [ -z "$SCRATCH_RTDEV" ]; then
+ zdev=$SCRATCH_DEV
+else
+ zdev=$SCRATCH_RTDEV
+fi
+
+_require_zoned_device $zdev
+_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 oflag=direct >> $seqres.full 2>&1 \
+ || _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 $zdev | \
+ $AWK_PROG '/oi/ { print $2 }' | sed 's/,//')
+open_zone_wp=$($BLKZONE_PROG report $zdev | \
+ 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=$zdev 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 $zdev
+
+_scratch_mount
+rm $test_file
+_scratch_unmount
+
+# The previously open zone, now finished and unused, should have been reset
+nr_open=$($BLKZONE_PROG report $zdev | 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
next prev parent reply other threads:[~2025-05-08 5:35 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-08 5:34 new tests for zoned xfs v3 Christoph Hellwig
2025-05-08 5:34 ` [PATCH 01/16] common: generalize _filter_agno Christoph Hellwig
2025-05-08 15:12 ` Darrick J. Wong
2025-05-08 5:34 ` [PATCH 02/16] add a new rw_hint helper Christoph Hellwig
2025-05-08 5:34 ` [PATCH 03/16] xfs: add a test for zoned block accounting after remount Christoph Hellwig
2025-05-08 5:34 ` [PATCH 04/16] xfs: add a zoned growfs test Christoph Hellwig
2025-05-08 5:34 ` [PATCH 05/16] xfs: add test to check for block layer reordering Christoph Hellwig
2025-05-08 5:34 ` [PATCH 06/16] xfs: add a test to check that data growfs fails with internal rt device Christoph Hellwig
2025-05-08 5:34 ` [PATCH 07/16] xfs: add a test for write lifetime hints Christoph Hellwig
2025-05-08 5:34 ` [PATCH 08/16] xfs: add a test for writeback after close Christoph Hellwig
2025-05-08 5:34 ` [PATCH 09/16] xfs: test zone stream separation for two direct writers Christoph Hellwig
2025-05-08 5:34 ` [PATCH 10/16] xfs: test zone stream separation for two buffered writers Christoph Hellwig
2025-05-08 5:34 ` [PATCH 11/16] xfs: test zoned ENOSPC behavior with multiple writers Christoph Hellwig
2025-05-08 5:34 ` [PATCH 12/16] xfs: test zoned GC file defragmentation for sequential writers Christoph Hellwig
2025-05-08 5:34 ` [PATCH 13/16] xfs: test zoned GC file defragmentation for random writers Christoph Hellwig
2025-05-08 5:34 ` [PATCH 14/16] xfs: test that xfs_repair does not mess up the zone used counter Christoph Hellwig
2025-05-08 5:34 ` [PATCH 15/16] xfs: test that truncate does not spuriously return ENOSPC Christoph Hellwig
2025-05-08 5:34 ` Christoph Hellwig [this message]
2025-05-08 18:43 ` new tests for zoned xfs v3 Zorro Lang
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=20250508053454.13687-17-hch@lst.de \
--to=hch@lst.de \
--cc=djwong@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=hans.holmberg@wdc.com \
--cc=linux-xfs@vger.kernel.org \
--cc=zlang@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).