From 414de1b79cd72368d216d6f9443fbf5e10f5931c Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 8 May 2025 07:34:44 +0200 Subject: [PATCH] xfs: test that truncate does not spuriously return ENOSPC For zoned file systems, truncate to an offset not aligned to the block size need to allocate a new block for zeroing the remainder. Test that this allocation can dip into the reserved pool even when other threads are waiting for space freed by GC. Signed-off-by: Christoph Hellwig Reviewed-by: Darrick J. Wong Reviewed-by: Zorro Lang Signed-off-by: Zorro Lang --- tests/xfs/646 | 37 +++++++++++++++++++++++++++++++++++++ tests/xfs/646.out | 1 + 2 files changed, 38 insertions(+) create mode 100755 tests/xfs/646 create mode 100644 tests/xfs/646.out diff --git a/tests/xfs/646 b/tests/xfs/646 new file mode 100755 index 00000000..6a65bd84 --- /dev/null +++ b/tests/xfs/646 @@ -0,0 +1,37 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Christoph Hellwig. +# +# FS QA Test No. 646 +# +# Ensure that a truncate that needs to zero the EOFblock doesn't get ENOSPC +# when another thread is waiting for space to become available through GC. +# +. ./common/preamble +_begin_fstest auto rw zone + +. ./common/zoned + +_require_scratch + +_scratch_mkfs_sized $((256 * 1024 * 1024)) >>$seqres.full 2>&1 +_scratch_mount +_require_xfs_scratch_zoned + +for i in `seq 1 20`; do + # fill up all user capacity + PUNCH_FILE=$SCRATCH_MNT/punch.$i + TEST_FILE=$SCRATCH_MNT/file.$i + + dd if=/dev/zero of=$PUNCH_FILE bs=1M count=128 conv=fdatasync \ + >> $seqres.full 2>&1 + + dd if=/dev/zero of=$TEST_FILE bs=4k >> $seqres.full 2>&1 & + # truncate to a value not rounded to the block size + $XFS_IO_PROG -c "truncate 3275" $PUNCH_FILE + sync $SCRATCH_MNT + rm -f $TEST_FILE +done + +status=0 +exit diff --git a/tests/xfs/646.out b/tests/xfs/646.out new file mode 100644 index 00000000..2eed050f --- /dev/null +++ b/tests/xfs/646.out @@ -0,0 +1 @@ +QA output created by 646 -- 2.39.5