From: Darrick J. Wong <djwong@xxxxxxxxxx> Add a regression test for XFS V1 inodes that have both nlink and onlink fields set to 1. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- tests/xfs/1890 | 39 +++++++++++++++++++++++++++++++++++++++ tests/xfs/1890.out | 7 +++++++ 2 files changed, 46 insertions(+) create mode 100755 tests/xfs/1890 create mode 100644 tests/xfs/1890.out diff --git a/tests/xfs/1890 b/tests/xfs/1890 new file mode 100755 index 0000000000..c3813fca67 --- /dev/null +++ b/tests/xfs/1890 @@ -0,0 +1,39 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oracle. All Rights Reserved. +# +# FS QA Test No. 1890 +# +# Regression test for V1 inodes that have di_onlink and di_nlink set to 1. +# +. ./common/preamble +_begin_fstest auto + +_fixed_by_kernel_commit XXXXXXXXXXXX \ + "xfs: fix di_onlink checking for V1/V2 inodes", + +_require_scratch_nocheck # we'll do our own checking +_require_xfs_nocrc + +_scratch_mkfs -m crc=0 >> $seqres.full +_scratch_xfs_db -x \ + -c 'sb' \ + -c 'addr rbmino' \ + -c 'print core.nlinkv2 core.onlink' \ + -c 'write -d core.version 1' \ + -c 'write -d core.nlinkv1 1' \ + -c 'print core.version core.nlinkv1' + +# repair doesn't flag this combination +_scratch_xfs_repair -n &>> $seqres.full || echo "xfs_repair -n failed??" + +# Prior to kernel commit 40cb8613d612 ("xfs: check unused nlink fields in the +# ondisk inode"), the kernel accepted V1 format inode where both the new and +# old nlink fields are set to 1. With that commit applied, it stopped +# accepting that combination and will refuse to mount. Hence we need the fix +# mentioned above. +_scratch_mount + +# success, all done +status=0 +exit diff --git a/tests/xfs/1890.out b/tests/xfs/1890.out new file mode 100644 index 0000000000..166ae90286 --- /dev/null +++ b/tests/xfs/1890.out @@ -0,0 +1,7 @@ +QA output created by 1890 +core.nlinkv2 = 1 +core.onlink = 0 +core.version = 1 +core.nlinkv1 = 1 +core.version = 1 +core.nlinkv1 = 1