On 25/08/2021 09:22, Donald Douwsma wrote: > > > On 24/08/2021 16:23, Zorro Lang wrote: >> On Tue, Aug 24, 2021 at 01:04:36PM +0800, Murphy Zhou wrote: >>> And followed by a rw mount. >>> >>> Suggested-by: Donald Douwsma <ddouwsma@xxxxxxxxxx> >>> Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> >>> Signed-off-by: Murphy Zhou <xzhou@xxxxxxxxxx> >>> --- >>> >>> Thanks Darrick very much for reviewing! >>> >>> v2: >>> Add explaination of the issue >>> add xfs_force_bdev data $SCRATCH_MNT >>> use DF_PROG >>> Re numbered this test >>> v3: >>> Add _require_scratch_shutdown >>> Use _get_available_space >>> Explain why does not use _scratch_mount >>> >>> tests/xfs/999 | 65 +++++++++++++++++++++++++++++++++++++++++++++++ >>> tests/xfs/999.out | 2 ++ >>> 2 files changed, 67 insertions(+) >>> create mode 100755 tests/xfs/999 >>> create mode 100644 tests/xfs/999.out >>> >>> diff --git a/tests/xfs/999 b/tests/xfs/999 >>> new file mode 100755 >>> index 00000000..0ce9989b >>> --- /dev/null >>> +++ b/tests/xfs/999 >>> @@ -0,0 +1,65 @@ >>> +#! /bin/bash >>> +# SPDX-License-Identifier: GPL-2.0 >>> +# Copyright (c) 2021 RedHat All Rights Reserved. >>> +# >>> +# FS QA Test 999 >>> +# >>> +# Testcase for kernel commit: >>> +# 50d25484bebe xfs: sync lazy sb accounting on quiesce of read-only mounts >>> +# >>> +# After shutdown and readonly mount, a following read-write mount would >>> +# get wrong number of available blocks. This is caused by unmounting the log >>> +# on a readonly filesystem doesn't log the sb counters. >>> +# >>> +. ./common/preamble >>> +_begin_fstest shutdown auto quick >>> + >>> +# real QA test starts here >>> + >>> +_supported_fs xfs >> >> I'm wondering what limits this test to be a xfs only test? The test steps looks >> common, right? > > It needs `shutdown -f` to force the log to disk, if there was a way to do that > reliably for other filesystems then yes we could shutdown in a different way > and make it generic. I didn't realize that Ext implements the XFS IOCTL to shutdown the filesystem in the same way (src/godown.c uses XFS in the IOCTL name),so it will work. Sweet! > > Don > >> >>> +_require_scratch >>> +_require_scratch_shutdown >>> + >>> +_scratch_mkfs > $seqres.full 2>&1 >>> +# Don't use _scratch_mount because we need to mount without SELinux context >>> +# to reproduce this issue. If we mount with SELinux context, this testcase >>> +# is not reproducing the original issue. >>> +mount $SCRATCH_DEV $SCRATCH_MNT >>> +_xfs_force_bdev data $SCRATCH_MNT >>> + >>> +# Write test file >>> +ls > $SCRATCH_MNT/testfile >>> +$DF_PROG $SCRATCH_MNT >> $seqres.full 2>&1 >>> + >>> +# Shutdown >>> +$XFS_IO_PROG -x -c "shutdown -f" $SCRATCH_MNT >>> + >>> +# Mount ReadOnly >>> +_scratch_unmount >>> +_scratch_mount -oro >>> +$DF_PROG $SCRATCH_MNT >> $seqres.full 2>&1 >>> +# Umount and mount rw >>> +_scratch_unmount >>> +_scratch_mount >>> + >>> +# Get fdblocks before repair >>> +fdb1=$(_get_available_space $SCRATCH_MNT) >>> +_scratch_unmount >>> + >>> +# Repair >>> +_repair_scratch_fs >> $seqres.full 2>&1 >>> + >>> +# Re-mount >>> +_scratch_mount >>> + >>> +# Get fdblocks after repair >>> +fdb2=$(_get_available_space $SCRATCH_MNT) >>> + >>> +echo fdb1 $fdb1 fdb2 $fdb2 >> $seqres.full 2>&1 >>> + >>> +[ $fdb1 -ne $fdb2 ] && echo Wrong fdblocks: $fdb1 and $fdb2 >>> + >>> +# success, all done >>> +echo "Silence is golden" >>> +status=0 >>> +exit >>> diff --git a/tests/xfs/999.out b/tests/xfs/999.out >>> new file mode 100644 >>> index 00000000..3b276ca8 >>> --- /dev/null >>> +++ b/tests/xfs/999.out >>> @@ -0,0 +1,2 @@ >>> +QA output created by 999 >>> +Silence is golden >>> -- >>> 2.20.1 >>> >>