From 46adeb1600bfc28b950f73e82eff66df8fced8a2 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Thu, 2 Apr 2020 20:33:55 -0700 Subject: [PATCH] generic: test PF_MEMALLOC interfering with accounting file write Add a regression test for the bug fixed by commit 10a98cb16d80 ("xfs: clear PF_MEMALLOC before exiting xfsaild thread"). Signed-off-by: Eric Biggers Reviewed-by: Darrick J. Wong Signed-off-by: Eryu Guan --- common/config | 1 + common/rc | 12 +++++++++ tests/generic/596 | 60 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/596.out | 2 ++ tests/generic/group | 1 + 5 files changed, 76 insertions(+) create mode 100755 tests/generic/596 create mode 100644 tests/generic/596.out diff --git a/common/config b/common/config index 1116cb99..8023273d 100644 --- a/common/config +++ b/common/config @@ -220,6 +220,7 @@ export DUPEREMOVE_PROG="$(type -P duperemove)" export CC_PROG="$(type -P cc)" export FSVERITY_PROG="$(type -P fsverity)" export OPENSSL_PROG="$(type -P openssl)" +export ACCTON_PROG="$(type -P accton)" # use 'udevadm settle' or 'udevsettle' to wait for lv to be settled. # newer systems have udevadm command but older systems like RHEL5 don't. diff --git a/common/rc b/common/rc index 3265c793..24a8f145 100644 --- a/common/rc +++ b/common/rc @@ -4184,6 +4184,18 @@ _require_negative_timestamps() { esac } +# Require the 'accton' userspace tool and CONFIG_BSD_PROCESS_ACCT=y. +_require_bsd_process_accounting() +{ + _require_command "$ACCTON_PROG" accton + $ACCTON_PROG on &> $tmp.test_accton + cat $tmp.test_accton >> $seqres.full + if grep 'Function not implemented' $tmp.test_accton; then + _notrun "BSD process accounting support unavailable" + fi + $ACCTON_PROG off >> $seqres.full +} + init_rc ################################################################################ diff --git a/tests/generic/596 b/tests/generic/596 new file mode 100755 index 00000000..2ea2c5e0 --- /dev/null +++ b/tests/generic/596 @@ -0,0 +1,60 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright 2020 Google LLC +# +# FS QA Test No. 596 +# +# Regression test for the bug fixed by commit 10a98cb16d80 ("xfs: clear +# PF_MEMALLOC before exiting xfsaild thread"). If the bug exists, a kernel +# WARNING should be triggered. See the commit message for details. +# +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() +{ + $ACCTON_PROG off >> $seqres.full + 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 generic +_supported_os Linux +_require_bsd_process_accounting +_require_chattr S +_require_test +_require_scratch + +# To trigger the bug we must unmount a filesystem while BSD process accounting +# is enabled. The accounting file must also be located on a different +# filesystem and have the sync flag set. + +accounting_file=$TEST_DIR/$seq + +rm -f $accounting_file +touch $accounting_file +$CHATTR_PROG +S $accounting_file + +_scratch_mkfs &>> $seqres.full +$ACCTON_PROG $accounting_file >> $seqres.full +_scratch_mount +_scratch_unmount +$ACCTON_PROG off >> $seqres.full + +echo "Silence is golden" + +status=0 +exit diff --git a/tests/generic/596.out b/tests/generic/596.out new file mode 100644 index 00000000..48bceb47 --- /dev/null +++ b/tests/generic/596.out @@ -0,0 +1,2 @@ +QA output created by 596 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index ad448f39..99d06c9a 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -597,3 +597,4 @@ 593 auto quick encrypt 594 auto quick quota 595 auto quick encrypt +596 auto quick -- 2.30.2