xfs: test agfl reset on bad list wrapping
PATCH v3 1/1 xfs: test agfl reset on bad list wrapping
From: Darrick J. Wong <[email protected]>
Quoted 1 line
From the kernel patch that this test examines ("xfs: detect agfl count
corruption and reset agfl"):
"The struct xfs_agfl v5 header was originally introduced with unexpected padding that caused the AGFL to operate with one less slot than intended. The header has since been packed, but the fix left an incompatibility for users who upgrade from an old kernel with the unpacked header to a newer kernel with the packed header while the AGFL happens to wrap around the end. The newer kernel recognizes one extra slot at the physical end of the AGFL that the previous kernel did not. The new kernel will eventually attempt to allocate a block from that slot, which contains invalid data, and cause a crash.
"This condition can be detected by comparing the active range of the AGFL to the count. While this detects a padding mismatch, it can also trigger false positives for unrelated flcount corruption. Since we cannot distinguish a size mismatch due to padding from unrelated corruption, we can't trust the AGFL enough to simply repopulate the empty slot.
"Instead, avoid unnecessarily complex detection logic and and use a solution that can handle any form of flcount corruption that slips through read verifiers: distrust the entire AGFL and reset it to an empty state. Any valid blocks within the AGFL are intentionally leaked. This requires xfs_repair to rectify (which was already necessary based on the state the AGFL was found in). The reset mitigates the side effect of the padding mismatch problem from a filesystem crash to a free space accounting inconsistency."
This test exercises the reset code by mutating a fresh filesystem to contain an agfl with various list configurations of correctly wrapped, incorrectly wrapped, not wrapped, and actually corrupt free lists; then checks the success of the reset operation by fragmenting the free space btrees to exercise the agfl. Kernels without this reset fix will shut down the filesystem with corruption errors.
---
v3: use fallocate instead of dd write, more factoring of common code
v2: remove unncessary umounts, refactor long lines into helpers
--- common/rc | 23 ++++- tests/xfs/709 | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/709.out | 13 +++ tests/xfs/group | 1 4 files changed, 293 insertions(+), 2 deletions(-) create mode 100755 tests/xfs/709 create mode 100644 tests/xfs/709.out
common/rc +21 -2
@@ -3440,6 +3440,26 @@ _get_device_size() grep `_short_dev $1` /proc/partitions | awk '{print $3}' } +# Make sure we actually have dmesg checking set up. +_require_check_dmesg() { + test -w /dev/kmsg || \ + _notrun "Test requires writable /dev/kmsg." +} + +# Return the dmesg log since the start of this test. Caller must ensure that +# /dev/kmsg was writable when the test was started so that we can find the +# beginning of this test's log messages; _require_check_dmesg does this. +_dmesg_since_test_start() { + dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ + tac +} + +# check dmesg log for a specific string, subject to the same requirements as +# _dmesg_since_test_start. +_check_dmesg_for() { + _dmesg_since_test_start | egrep -q "$1" +} + # check dmesg log for WARNING/Oops/etc. _check_dmesg() {
@@ -3455,8 +3475,7 @@ _check_dmesg() # search the dmesg log of last run of $seqnum for possible failures # use sed \cregexpc address type, since $seqnum contains "/" - dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ - tac | $filter >$seqres.dmesg + _dmesg_since_test_start | $filter >$seqres.dmesg egrep -q -e "kernel BUG at" \ -e "WARNING:" \ -e "BUG:" \
tests/xfs/709 new file +258 -0
258 lines not on this page · raw message
tests/xfs/709.out new file +13 -0
@@ -0,0 +1,13 @@ +QA output created by 709 +TEST fix_end +TEST fix_start +TEST fix_wrap +TEST start_zero +TEST good_end +TEST good_start +TEST good_wrap +TEST bad_start +ASSERT flfirst < good_agfl_size - 1 +ASSERT flfirst < fllast +TEST no_move +TEST simple_move
tests/xfs/group +1 -0
@@ -441,3 +441,4 @@ 441 auto quick clone quota 442 auto stress clone quota 443 auto quick ioctl fsr +709 auto quick
PATCH 1/1 common/xfs: don't call xfs_scrub on a block device
From: Darrick J. Wong <[email protected]>
xfs_scrub takes an xfs mountpoint as its argument, not a block device. Therefore, fix _check_xfs_filesystem to call it correctly.
--- common/xfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
common/xfs +1 -1
@@ -358,7 +358,7 @@ _check_xfs_filesystem() # Run online scrub if we can. mntpt="$(_is_dev_mounted $device)" if [ -n "$mntpt" ] && _supports_xfs_scrub "$mntpt" "$device"; then - "$XFS_SCRUB_PROG" $scrubflag -v -d -n $device > $tmp.scrub 2>&1 + "$XFS_SCRUB_PROG" $scrubflag -v -d -n $mntpt > $tmp.scrub 2>&1 if [ $? -ne 0 ]; then _log_err "_check_xfs_filesystem: filesystem on $device failed scrub" echo "*** xfs_scrub $scrubflag -v -d -n output ***" >> $seqres.full
Re: [PATCH] common/xfs: don't call xfs_scrub on a block device
Quoted 4 lines · Darrick J. Wong
From: Darrick J. Wong<[email protected]>
xfs_scrubtakes an xfs mountpoint as its argument, not a block device. Therefore, fix_check_xfs_filesystemto call it correctly.
Hi Darrick,
According to xfs_scrub manpage, it seems that xfs_scrub can take a mounted block device as its argument. Is the xfs_scrub manpage incorrect?
Thanks,
Xiao Yang
Quoted 25 lines
Signed-off-by Darrick J. Wong<[email protected]>--- common/xfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)common/xfs +1
-2@@ -358,7 +358,7 @@ _check_xfs_filesystem() # Run online scrub if we can. mntpt="$(_is_dev_mounted $device)" if [ -n "$mntpt" ]&& _supports_xfs_scrub "$mntpt" "$device"; then - "$XFS_SCRUB_PROG" $scrubflag -v -d -n $device> $tmp.scrub 2>&1 + "$XFS_SCRUB_PROG" $scrubflag -v -d -n $mntpt> $tmp.scrub 2>&1 if [ $? -ne 0 ]; then _log_err "_check_xfs_filesystem: filesystem on $device failed scrub" echo "*** xfs_scrub $scrubflag -v -d -n output ***">> $seqres.full --To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] common/xfs: don't call xfs_scrub on a block device
Quoted 9 lines · Xiao Yang
Quoted 4 lines · Darrick J. Wong
From: Darrick J. Wong<[email protected]>
xfs_scrubtakes an xfs mountpoint as its argument, not a block device. Therefore, fix_check_xfs_filesystemto call it correctly.Hi Darrick,
According to
xfs_scrubmanpage, it seems thatxfs_scrubcan take a mounted block device as its argument. Is thexfs_scrubmanpage incorrect?
Yes, the manpage is wrong and will be fixed in xfsprogs 4.16.
--D
Quoted 31 lines
Thanks,
Xiao YangQuoted 25 lines
Signed-off-by Darrick J. Wong<[email protected]>--- common/xfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)common/xfs +1
-2@@ -358,7 +358,7 @@ _check_xfs_filesystem() # Run online scrub if we can. mntpt="$(_is_dev_mounted $device)" if [ -n "$mntpt" ]&& _supports_xfs_scrub "$mntpt" "$device"; then - "$XFS_SCRUB_PROG" $scrubflag -v -d -n $device> $tmp.scrub 2>&1 + "$XFS_SCRUB_PROG" $scrubflag -v -d -n $mntpt> $tmp.scrub 2>&1 if [ $? -ne 0 ]; then _log_err "_check_xfs_filesystem: filesystem on $device failed scrub" echo "*** xfs_scrub $scrubflag -v -d -n output ***">> $seqres.full --To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 1/1 common/xfs: fix various problems with _supports_xfs_scrub
In reply to Darrick J. WongFrom: Darrick J. Wong <[email protected]>
The _supports_xfs_scrub helper is called with a mountpoint (a working mountpoint is required for scrub) and a block device (used to detect norecovery mounts). If either of these conditions aren't satisfied we should return failure status to the caller, not unilaterally decide to bail out of the test. In particular, the -b test doesn't work if the fs has already shutdown on us.
--- common/xfs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
common/xfs +6 -2
@@ -305,9 +305,13 @@ _supports_xfs_scrub() local mountpoint="$1" local device="$2" - if [ ! -b "$device" ] || [ ! -e "$mountpoint" ]; then + if [ -z "$device" ] || [ -z "$mountpoint" ]; then echo "Usage: _supports_xfs_scrub mountpoint device" - exit 1 + return 1 + fi + + if [ ! -b "$device" ] || [ ! -e "$mountpoint" ]; then + return 1 fi test "$FSTYP" = "xfs" || return 1
Quoted 84 lines · Darrick J. Wong
From: Darrick J. Wong <[email protected]>
From the kernel patch that this test examines ("xfs: detect agfl count corruption and reset agfl"):
"The struct
xfs_agflv5 header was originally introduced with unexpected padding that caused the AGFL to operate with one less slot than intended. The header has since been packed, but the fix left an incompatibility for users who upgrade from an old kernel with the unpacked header to a newer kernel with the packed header while the AGFL happens to wrap around the end. The newer kernel recognizes one extra slot at the physical end of the AGFL that the previous kernel did not. The new kernel will eventually attempt to allocate a block from that slot, which contains invalid data, and cause a crash."This condition can be detected by comparing the active range of the AGFL to the count. While this detects a padding mismatch, it can also trigger false positives for unrelated flcount corruption. Since we cannot distinguish a size mismatch due to padding from unrelated corruption, we can't trust the AGFL enough to simply repopulate the empty slot.
"Instead, avoid unnecessarily complex detection logic and and use a solution that can handle any form of flcount corruption that slips through read verifiers: distrust the entire AGFL and reset it to an empty state. Any valid blocks within the AGFL are intentionally leaked. This requires
xfs_repairto rectify (which was already necessary based on the state the AGFL was found in). The reset mitigates the side effect of the padding mismatch problem from a filesystem crash to a free space accounting inconsistency."This test exercises the reset code by mutating a fresh filesystem to contain an agfl with various list configurations of correctly wrapped, incorrectly wrapped, not wrapped, and actually corrupt free lists; then checks the success of the reset operation by fragmenting the free space btrees to exercise the agfl. Kernels without this reset fix will shut down the filesystem with corruption errors.
Signed-off-by Darrick J. Wong <[email protected]>---
v3: use fallocate instead of dd write, more factoring of common code
v2: remove unncessary umounts, refactor long lines into helpers--- common/rc | 23 ++++- tests/xfs/709 | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/709.out | 13 +++ tests/xfs/group | 1 4 files changed, 293 insertions(+), 2 deletions(-) create mode 100755 tests/xfs/709 create mode 100644 tests/xfs/709.outcommon/rc +20
-0@@ -3440,6 +3440,26 @@ _get_device_size() grep `_short_dev $1` /proc/partitions | awk '{print $3}' } +# Make sure we actually have dmesg checking set up. +_require_check_dmesg() { + test -w /dev/kmsg || \ + _notrun "Test requires writable /dev/kmsg." +} + +# Return the dmesg log since the start of this test. Caller must ensure that +# /dev/kmsg was writable when the test was started so that we can find the +# beginning of this test's log messages; _require_check_dmesg does this. +_dmesg_since_test_start() { + dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ + tac +} + +# check dmesg log for a specific string, subject to the same requirements as +# _dmesg_since_test_start. +_check_dmesg_for() { + _dmesg_since_test_start | egrep -q "$1" +} + # check dmesg log for WARNING/Oops/etc. _check_dmesg() {
common/rc _check_dmesg() · line 3477
Quoted 3 lines
common/rc +0
-0@@ -3455,8 +3475,7 @@ _check_dmesg() # search the dmesg log of last run of $seqnum for possible failures # use sed \cregexpc address type, since $seqnum contains "/"
The comments about sed usage probably should go to _dmesg_since_test_start() too.
Quoted 75 lines
common/rc +1
-2- dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ - tac | $filter >$seqres.dmesg + _dmesg_since_test_start | $filter >$seqres.dmesg egrep -q -e "kernel BUG at" \ -e "WARNING:" \ -e "BUG:" \tests/xfs/709 new file +63
-0@@ -0,0 +1,258 @@ +#! /bin/bash +# FS QA Test No. 709 +# +# Make sure XFS can fix a v5 AGFL that wraps over the last block. +# Refer to commit 96f859d52bcb ("libxfs: pack the agfl header structure so +# XFS_AGFL_SIZE is correct") for details on the original on-disk format error +# and the patch "xfs: detect agfl count corruption and reset agfl") for details +# about the fix. +# +#----------------------------------------------------------------------- +# Copyright (c) 2018 Oracle, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 +trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +rm -f $seqres.full + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_require_check_dmesg +_require_scratch +_require_test_program "punch-alternating" + +# This is only a v5 filesystem problem +_require_scratch_xfs_crc + +mount_loop() { + if ! _try_scratch_mount >> $seqres.full 2>&1; then + echo "scratch mount failed" >> $seqres.full
tests/xfs/709 line 73
Quoted 10 lines
tests/xfs/709 new file +10
-0+ return + fi + + # Trigger agfl fixing by fragmenting free space enough to cause + # a bnobt split + blksz=$(_get_file_block_size ${SCRATCH_MNT}) + bno_maxrecs=$(( blksz / 8 )) + filesz=$((bno_maxrecs * 3 * blksz)) + rm -rf $SCRATCH_MNT/a + $XFS_IO_PROG -f -c "falloc 0 $filesz" $SCRATCH_MNT/a
And I noticed test failure with patch "xfs: detect agfl count corruption and reset agfl" applied on top of 4.16-rc5 kernel. Looks like we should dump xfs_io output to $seqres.full, as in v2 patch
dd if=/dev/zero of=$SCRATCH_MNT/a bs=8192k >> $seqres.full 2>&1
root/workspace/xfstests/results//xfs_4k_crc/xfs/709.out.bad 2018-03-23 13:12:10.083980820 +0800 renamed from xfs/709.out 2018-03-23 12:45:16.831011711 +0800 +1 -0
@@ -7,6 +7,7 @@ TEST good_start TEST good_wrap TEST bad_start +fallocate: Structure needs cleaning ASSERT flfirst < good_agfl_size - 1 ASSERT flfirst < fllast TEST no_move
Quoted 5 lines
tests/xfs/709 new file +5
-0+ test -e $SCRATCH_MNT/a && ./src/punch-alternating $SCRATCH_MNT/a + rm -rf $SCRATCH_MNT/a + + _scratch_unmount 2>&1 | _filter_scratch +}
tests/xfs/709 line 88
Quoted 10 lines
tests/xfs/709 new file +10
-0+ +dump_ag0() { + _scratch_xfs_db -c 'sb 0' -c 'p' -c 'agf 0' -c 'p' -c 'agfl 0' -c 'p' +} + +runtest() { + cmd="$1" + + # Format filesystem + echo "TEST $cmd" | tee /dev/ttyprintk
What's the purpose of writing to /dev/ttyprintk? I don't see how it's used in the test.
Thanks,
Eryu
Quoted 86 lines · Eryu Guan
Quoted 85 lines · Darrick J. Wong
From: Darrick J. Wong <[email protected]>
From the kernel patch that this test examines ("xfs: detect agfl count corruption and reset agfl"):
"The struct
xfs_agflv5 header was originally introduced with unexpected padding that caused the AGFL to operate with one less slot than intended. The header has since been packed, but the fix left an incompatibility for users who upgrade from an old kernel with the unpacked header to a newer kernel with the packed header while the AGFL happens to wrap around the end. The newer kernel recognizes one extra slot at the physical end of the AGFL that the previous kernel did not. The new kernel will eventually attempt to allocate a block from that slot, which contains invalid data, and cause a crash."This condition can be detected by comparing the active range of the AGFL to the count. While this detects a padding mismatch, it can also trigger false positives for unrelated flcount corruption. Since we cannot distinguish a size mismatch due to padding from unrelated corruption, we can't trust the AGFL enough to simply repopulate the empty slot.
"Instead, avoid unnecessarily complex detection logic and and use a solution that can handle any form of flcount corruption that slips through read verifiers: distrust the entire AGFL and reset it to an empty state. Any valid blocks within the AGFL are intentionally leaked. This requires
xfs_repairto rectify (which was already necessary based on the state the AGFL was found in). The reset mitigates the side effect of the padding mismatch problem from a filesystem crash to a free space accounting inconsistency."This test exercises the reset code by mutating a fresh filesystem to contain an agfl with various list configurations of correctly wrapped, incorrectly wrapped, not wrapped, and actually corrupt free lists; then checks the success of the reset operation by fragmenting the free space btrees to exercise the agfl. Kernels without this reset fix will shut down the filesystem with corruption errors.
Signed-off-by Darrick J. Wong <[email protected]>---
v3: use fallocate instead of dd write, more factoring of common code
v2: remove unncessary umounts, refactor long lines into helpers--- common/rc | 23 ++++- tests/xfs/709 | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/709.out | 13 +++ tests/xfs/group | 1 4 files changed, 293 insertions(+), 2 deletions(-) create mode 100755 tests/xfs/709 create mode 100644 tests/xfs/709.outcommon/rc +20
-0@@ -3440,6 +3440,26 @@ _get_device_size() grep `_short_dev $1` /proc/partitions | awk '{print $3}' } +# Make sure we actually have dmesg checking set up. +_require_check_dmesg() { + test -w /dev/kmsg || \ + _notrun "Test requires writable /dev/kmsg." +} + +# Return the dmesg log since the start of this test. Caller must ensure that +# /dev/kmsg was writable when the test was started so that we can find the +# beginning of this test's log messages; _require_check_dmesg does this. +_dmesg_since_test_start() { + dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ + tac +} + +# check dmesg log for a specific string, subject to the same requirements as +# _dmesg_since_test_start. +_check_dmesg_for() { + _dmesg_since_test_start | egrep -q "$1" +} + # check dmesg log for WARNING/Oops/etc. _check_dmesg() {@@ -3455,8 +3475,7 @@ _check_dmesg()
Quoted 5 lines
common/rc _check_dmesg() · line 3477
Quoted 2 lines
common/rc +0
-0# search the dmesg log of last run of $seqnum for possible failures # use sed \cregexpc address type, since $seqnum contains "/"The comments about sed usage probably should go to
_dmesg_since_test_start()too.
Ok
Quoted 90 lines
Quoted 75 lines
common/rc +1
-2- dmesg | tac | sed -ne "0,\#run fstests $seqnum at $date_time#p" | \ - tac | $filter >$seqres.dmesg + _dmesg_since_test_start | $filter >$seqres.dmesg egrep -q -e "kernel BUG at" \ -e "WARNING:" \ -e "BUG:" \tests/xfs/709 new file +63
-0@@ -0,0 +1,258 @@ +#! /bin/bash +# FS QA Test No. 709 +# +# Make sure XFS can fix a v5 AGFL that wraps over the last block. +# Refer to commit 96f859d52bcb ("libxfs: pack the agfl header structure so +# XFS_AGFL_SIZE is correct") for details on the original on-disk format error +# and the patch "xfs: detect agfl count corruption and reset agfl") for details +# about the fix. +# +#----------------------------------------------------------------------- +# Copyright (c) 2018 Oracle, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 +trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +rm -f $seqres.full + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_require_check_dmesg +_require_scratch +_require_test_program "punch-alternating" + +# This is only a v5 filesystem problem +_require_scratch_xfs_crc + +mount_loop() { + if ! _try_scratch_mount >> $seqres.full 2>&1; then + echo "scratch mount failed" >> $seqres.fulltests/xfs/709 line 73
Quoted 10 lines
tests/xfs/709 new file +10
-0+ return + fi + + # Trigger agfl fixing by fragmenting free space enough to cause + # a bnobt split + blksz=$(_get_file_block_size ${SCRATCH_MNT}) + bno_maxrecs=$(( blksz / 8 )) + filesz=$((bno_maxrecs * 3 * blksz)) + rm -rf $SCRATCH_MNT/a + $XFS_IO_PROG -f -c "falloc 0 $filesz" $SCRATCH_MNT/aAnd I noticed test failure with patch "xfs: detect agfl count corruption and reset agfl" applied on top of 4.16-rc5 kernel. Looks like we should dump
xfs_iooutput to $seqres.full, as in v2 patch
Quoted 1 line
dd if=/dev/zero of=$SCRATCH_MNT/a bs=8192k >> $seqres.full 2>&1
Yep.
In the bad_start case the fs checks every agfl and refuses to mount... if your kernel has CONFIG_XFS_DEBUG=y.
Quoted 21 lines
root/workspace/xfstests/results//xfs_4k_crc/xfs/709.out.bad 2018-03-23 13:12:10.083980820 +0800 renamed from xfs/709.out 2018-03-23 12:45:16.831011711 +0800 +1
-0@@ -7,6 +7,7 @@ TEST good_start TEST good_wrap TEST bad_start +fallocate: Structure needs cleaning ASSERT flfirst < good_agfl_size - 1 ASSERT flfirst < fllast TEST no_moveQuoted 11 lines
tests/xfs/709 new file +10
-0+ test -e $SCRATCH_MNT/a && ./src/punch-alternating $SCRATCH_MNT/a + rm -rf $SCRATCH_MNT/a + + _scratch_unmount 2>&1 | _filter_scratch +} + +dump_ag0() { + _scratch_xfs_db -c 'sb 0' -c 'p' -c 'agf 0' -c 'p' -c 'agfl 0' -c 'p' +} +
Quoted 8 lines
tests/xfs/709 line 88
Quoted 5 lines
tests/xfs/709 new file +5
-0+runtest() { + cmd="$1" + + # Format filesystem + echo "TEST $cmd" | tee /dev/ttyprintkWhat's the purpose of writing to
/dev/ttyprintk? I don't see how it's used in the test.
It makes it easy to tell which kernel messages came from which runtest() invocation so that we can tell if a particular agfl mutation test actually triggered the fixup.
--D
Quoted 6 lines
Thanks,
Eryu
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Darrick J. Wong
Quoted 6 lines
Review
Quoted 3 lines
(quoted diff) +3
-0+ + # Format filesystem + echo "TEST $cmd" | tee /dev/ttyprintkWhat's the purpose of writing to
/dev/ttyprintk? I don't see how it's used in the test.It makes it easy to tell which kernel messages came from which
runtest()invocation so that we can tell if a particular agfl mutation test actually triggered the fixup.
This could fail the test if /dev/ttyprintk doesn't exist. It seems writing to /dev/kmsg works could tell us the same information, and we've already made sure /dev/kmsg is writable by _require_check_dmesg. IMHO /dev/kmsg might be a better choice here.
Thanks,
Eryu
Quoted 8 lines · Eryu Guan
Quoted 7 lines · Darrick J. Wong
Quoted 6 lines
Review
Quoted 3 lines
(quoted diff) +3
-0+ + # Format filesystem + echo "TEST $cmd" | tee /dev/ttyprintkWhat's the purpose of writing to
/dev/ttyprintk? I don't see how it's used in the test.
Quoted 5 lines
Quoted 3 lines
It makes it easy to tell which kernel messages came from which
runtest()invocation so that we can tell if a particular agfl mutation test actually triggered the fixup.This could fail the test if
/dev/ttyprintkdoesn't exist. It seems
Correction, it doesn't fail the test, but creates a new /dev/ttyprintk file.. but still, I think this should be addressed.
Rather than that, the test runs good for me, it fails with 4.16-rc7 kernel and passes with the mentioned patch applied.
Brian, would you please help review the new version of this patch in patchset "[PATCH 0/4] misc. fstests changes" (patch 3/4) as well? I really like a Reviewed-by tag from someone who knows all the details of the test and the fix :) Thanks a lot!
Eryu
Quoted 6 lines
writing to
/dev/kmsgworks could tell us the same information, and we've already made sure/dev/kmsgis writable by_require_check_dmesg. IMHO/dev/kmsgmight be a better choice here.Thanks,
Eryu