This commit adds a test to check if growing a real-time device can end up logging an xfs_buf with the "type" subfield of bip->bli_formats->blf_flags set to XFS_BLFT_UNKNOWN_BUF. When this occurs the following call trace is printed on the console, XFS: Assertion failed: (bip->bli_flags & XFS_BLI_STALE) || (xfs_blft_from_flags(&bip->__bli_format) > XFS_BLFT_UNKNOWN_BUF && xfs_blft_from_flags(&bip->__bli_format) < XFS_BLFT_MAX_BUF), file: fs/xfs/xfs_buf_item.c, line: 331 Call Trace: xfs_buf_item_format+0x632/0x680 ? kmem_alloc_large+0x29/0x90 ? kmem_alloc+0x70/0x120 ? xfs_log_commit_cil+0x132/0x940 xfs_log_commit_cil+0x26f/0x940 ? xfs_buf_item_init+0x1ad/0x240 ? xfs_growfs_rt_alloc+0x1fc/0x280 __xfs_trans_commit+0xac/0x370 xfs_growfs_rt_alloc+0x1fc/0x280 xfs_growfs_rt+0x1a0/0x5e0 xfs_file_ioctl+0x3fd/0xc70 ? selinux_file_ioctl+0x174/0x220 ksys_ioctl+0x87/0xc0 __x64_sys_ioctl+0x16/0x20 do_syscall_64+0x3e/0x70 entry_SYSCALL_64_after_hwframe+0x44/0xa9 The kernel patch "xfs: Set xfs_buf type flag when growing summary/bitmap files" is required to fix this issue. Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx> Signed-off-by: Chandan Babu R <chandanrlinux@xxxxxxxxx> --- tests/xfs/260 | 53 +++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/260.out | 2 ++ tests/xfs/group | 1 + 3 files changed, 56 insertions(+) create mode 100755 tests/xfs/260 create mode 100644 tests/xfs/260.out diff --git a/tests/xfs/260 b/tests/xfs/260 new file mode 100755 index 00000000..078d4a11 --- /dev/null +++ b/tests/xfs/260 @@ -0,0 +1,53 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 Chandan Babu R. All Rights Reserved. +# +# FS QA Test 260 +# +# Test to check if growing a real-time device can end up logging an xfs_buf with +# the "type" subfield of bip->bli_formats->blf_flags set to +# XFS_BLFT_UNKNOWN_BUF. +# +# This is a regression test for the kernel patch "xfs: Set xfs_buf type flag +# when growing summary/bitmap files". + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs xfs +_supported_os Linux +_require_realtime + +_scratch_mkfs -r size=10M >> $seqres.full + +_scratch_mount >> $seqres.full + +$XFS_GROWFS_PROG $SCRATCH_MNT >> $seqres.full + +_scratch_unmount + +echo "Silence is golden" + +# success, all done +status=0 +exit diff --git a/tests/xfs/260.out b/tests/xfs/260.out new file mode 100644 index 00000000..18ca517c --- /dev/null +++ b/tests/xfs/260.out @@ -0,0 +1,2 @@ +QA output created by 260 +Silence is golden diff --git a/tests/xfs/group b/tests/xfs/group index 3bb0f674..a3f5c81a 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -257,6 +257,7 @@ 257 auto quick clone 258 auto quick clone 259 auto quick +260 auto quick growfs realtime 261 auto quick quota 262 dangerous_fuzzers dangerous_scrub dangerous_online_repair 263 auto quick quota -- 2.28.0