On Fri, Mar 03, 2017 at 06:01:29PM -0500, Theodore Ts'o wrote: > On Fri, Mar 03, 2017 at 09:21:57AM -0800, Darrick J. Wong wrote: > > > > <shrug> The test device isn't supposed to get corrupted, since it (at > > least in theory) should be an old filesystem. That said, I suppose > > there's little point in banging around with a corrupt test fs. Maybe we > > could go further and stop running if there's unfixable corruption? > > Yes, that was the other alternative I considered. In my case, though, > since I'm trying to get a sense of how many failures I have to deal > with, I really wanted a "make -k" behavior that would continue after > the first failure. After all, all I was going to do was manually run > fsck, and then continue the run --- so we might as well have the check > script do it automatically and then allow things to continue. > > We could make it be configurable, via a command-line option. The -k > option isn't taken so we could have check -k that works like make -k > if you think that's better. OTOH, perhaps making -k the default > behaviour is actually the better way to go, and in that case, maybe > it's not worth having the command-line flag? Eryu, do you have any preferences or comments about how you'd like me to modify this patch for upstreaming? (Attached is my current version of the patch). Thanks!! - Ted commit 727c737d1f0a40288fc897c0263fbf8e7a5db8b3 Author: Theodore Ts'o <tytso@xxxxxxx> Date: Wed Mar 1 19:54:08 2017 -0500 check: try to fix the test device if it gets corrupted If the test device gets corrupted all subsequent tests will fail. To prevent this from causing all subsequent tests to be useless, try repair the file system on TEST_DEV if possible. We don't need to do this with the scratch device since that file system gets recreated each time anyway. Signed-off-by: Theodore Ts'o <tytso@xxxxxxx> diff --git a/check b/check index 2fcf385f..d253f744 100755 --- a/check +++ b/check @@ -472,7 +472,11 @@ _summary() _check_filesystems() { if [ -f ${RESULT_DIR}/require_test ]; then - _check_test_fs || err=true + if ! _check_test_fs ; then + err=true + echo "Trying to repair broken TEST_DEV file system" + _repair_test_fs + fi rm -f ${RESULT_DIR}/require_test* fi if [ -f ${RESULT_DIR}/require_scratch ]; then diff --git a/common/rc b/common/rc index 052f67aa..ce491f3f 100644 --- a/common/rc +++ b/common/rc @@ -1172,6 +1172,28 @@ _repair_scratch_fs() esac } +_repair_test_fs() +{ + case $FSTYP in + ext2|ext3|ext4) + fsck -t $FSTYP -fy $TEST_DEV >$tmp.repair 2>&1 + if test $? -ge 4 ; then + echo "_repair_test_fs: couldn't repair filesystem on $device (see $seqres.full)" + + echo "_repair_test_fs: couldn't repair filesystem on $device" >>$seqres.full + echo "*** fsck.$FSTYP output ***" >>$seqres.full + cat $tmp.repair >>$seqres.full + echo "*** end fsck.$FSTYP output" >>$seqres.full + return 1 + fi + return 0 + ;; + *) + return 1 + ;; + esac +} + _get_pids_by_name() { if [ $# -ne 1 ] -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html