From: Chengguang Xu Date: Fri, 15 Dec 2017 07:47:33 +0000 (+0800) Subject: common/rc: add scratch shutdown support for overlayfs X-Git-Tag: v2022.05.01~1726 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2b4eae7fd825ffe2a966b2b1d8a040dcb999edf7;p=xfstests-dev.git common/rc: add scratch shutdown support for overlayfs Enable shutdown tests on overlayfs. This requires configuring overlayfs with TEST|SCRATCH_DEV pointing to block device, which act as base fs of overlay. The legacy config (pointing TEST|SCRATCH_DEV to existing directories) won't support shutdown. Extend _require_scratch_shutdown() to deal with overlay by checking shutdown support on $OVL_BASE_SCRATCH_MNT instead of $SCRATCH_MNT, so we check shutdown support status against the underlying upper fs of overlay. Introduce new _scratch_shutdown() helper to do the actual shutdown work and shutdown upper fs in the case of overlay. Also converting existing bare 'src/godown' calls to use this helper to avoid false failures when testing overlayfs. generic/042 and generic/050 assume $SCRATCH_DEV to be a local device, so add _require_local_device $SCRATCH_DEV rule. [eguan: rewrite commit log] Signed-off-by: Chengguang Xu Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- diff --git a/common/rc b/common/rc index cbfc85c5..cebd3634 100644 --- a/common/rc +++ b/common/rc @@ -382,6 +382,23 @@ _scratch_cycle_mount() _scratch_mount "$opts" } +_scratch_shutdown() +{ + if [ $FSTYP = "overlay" ]; then + # In lagacy overlay usage, it may specify directory as + # SCRATCH_DEV, in this case OVL_BASE_SCRATCH_DEV + # will be null, so check OVL_BASE_SCRATCH_DEV before + # running shutdown to avoid shutting down base fs accidently. + if [ -z $OVL_BASE_SCRATCH_DEV ]; then + _fail "_scratch_shutdown: call _require_scratch_shutdown first in test" + else + src/godown $* $OVL_BASE_SCRATCH_MNT + fi + else + src/godown $* $SCRATCH_MNT + fi +} + _test_mount() { if [ "$FSTYP" == "overlay" ]; then @@ -2915,10 +2932,25 @@ _require_scratch_shutdown() { [ -x src/godown ] || _notrun "src/godown executable not found" - _scratch_mkfs > /dev/null 2>&1 - _scratch_mount - src/godown -f $SCRATCH_MNT 2>&1 \ - || _notrun "$FSTYP does not support shutdown" + _scratch_mkfs > /dev/null 2>&1 || _notrun "_scratch_mkfs failed on $SCRATCH_DEV" + _scratch_mount || _notrun "_scratch_mount failed on $SCRATCH_MNT" + + if [ $FSTYP = "overlay" ]; then + if [ -z $OVL_BASE_SCRATCH_DEV ]; then + # In lagacy overlay usage, it may specify directory as + # SCRATCH_DEV, in this case OVL_BASE_SCRATCH_DEV + # will be null, so check OVL_BASE_SCRATCH_DEV before + # running shutdown to avoid shutting down base fs accidently. + _notrun "$SCRATCH_DEV is not a block device" + else + src/godown -f $OVL_BASE_SCRATCH_MNT 2>&1 \ + || _notrun "Underlying filesystem does not support shutdown" + fi + else + src/godown -f $SCRATCH_MNT 2>&1 \ + || _notrun "$FSTYP does not support shutdown" + fi + _scratch_unmount } diff --git a/tests/generic/042 b/tests/generic/042 index 68ff03c6..00b3a346 100755 --- a/tests/generic/042 +++ b/tests/generic/042 @@ -92,6 +92,7 @@ _require_xfs_io_command "fpunch" _require_xfs_io_command "fzero" _scratch_mkfs >/dev/null 2>&1 +_require_local_device $SCRATCH_DEV _require_metadata_journaling $SCRATCH_DEV _scratch_mount diff --git a/tests/generic/043 b/tests/generic/043 index 5dadab32..f61222ce 100755 --- a/tests/generic/043 +++ b/tests/generic/043 @@ -63,7 +63,7 @@ done # give the system a chance to write something out sleep 10 -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount diff --git a/tests/generic/044 b/tests/generic/044 index 804b1b17..f327ee0b 100755 --- a/tests/generic/044 +++ b/tests/generic/044 @@ -69,7 +69,7 @@ done # give the system a chance to write something out sleep 10 -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount diff --git a/tests/generic/045 b/tests/generic/045 index 5fa7b09f..53489108 100755 --- a/tests/generic/045 +++ b/tests/generic/045 @@ -69,7 +69,7 @@ done # give the system a chance to write something out sleep 10 -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount diff --git a/tests/generic/046 b/tests/generic/046 index bf38d53a..1155ee98 100755 --- a/tests/generic/046 +++ b/tests/generic/046 @@ -69,7 +69,7 @@ done # give the system a chance to write something out sleep 10 -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount diff --git a/tests/generic/047 b/tests/generic/047 index 7d09b04c..66965f25 100755 --- a/tests/generic/047 +++ b/tests/generic/047 @@ -92,7 +92,7 @@ do done # shutdown immediately after, then remount and test -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount _scratch_unmount diff --git a/tests/generic/048 b/tests/generic/048 index ae561fca..fd9fcd92 100755 --- a/tests/generic/048 +++ b/tests/generic/048 @@ -96,7 +96,7 @@ done # sync, then shutdown immediately after, then remount and test sync -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount _scratch_unmount diff --git a/tests/generic/049 b/tests/generic/049 index ef2b44c4..0003046b 100755 --- a/tests/generic/049 +++ b/tests/generic/049 @@ -93,7 +93,7 @@ done # sync, then shutdown immediately after, then remount and test sync -src/godown $SCRATCH_MNT +_scratch_shutdown _scratch_unmount _scratch_mount _scratch_unmount diff --git a/tests/generic/050 b/tests/generic/050 index efa45f04..dbf0ac5c 100755 --- a/tests/generic/050 +++ b/tests/generic/050 @@ -44,6 +44,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _supported_fs generic _supported_os Linux +_require_local_device $SCRATCH_DEV _require_scratch_nocheck _require_scratch_shutdown _require_norecovery diff --git a/tests/generic/051 b/tests/generic/051 index 29ac61b6..129a4668 100755 --- a/tests/generic/051 +++ b/tests/generic/051 @@ -80,7 +80,7 @@ sync # now shutdown and unmount sleep 5 -$here/src/godown $load_dir +_scratch_shutdown $KILLALL_PROG -q $FSSTRESS_PROG wait diff --git a/tests/generic/052 b/tests/generic/052 index cf0f4568..126f08e6 100755 --- a/tests/generic/052 +++ b/tests/generic/052 @@ -63,7 +63,7 @@ echo "touch files" touch $SCRATCH_MNT/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9} echo "godown" -src/godown -v -f $SCRATCH_MNT >> $seqres.full +_scratch_shutdown -v -f >> $seqres.full echo "unmount" _scratch_unmount diff --git a/tests/generic/054 b/tests/generic/054 index db415009..12f471a1 100755 --- a/tests/generic/054 +++ b/tests/generic/054 @@ -108,7 +108,7 @@ for s in sync nosync ; do ls $SCRATCH_MNT | _filter_lostfound _echofull "godown" - src/godown -v -f $SCRATCH_MNT >> $seqres.full + _scratch_shutdown -v -f >> $seqres.full _echofull "unmount" _scratch_unmount >>$seqres.full 2>&1 \ diff --git a/tests/generic/055 b/tests/generic/055 index 1bbe3108..c543e751 100755 --- a/tests/generic/055 +++ b/tests/generic/055 @@ -118,7 +118,7 @@ do ls -RF $SCRATCH_MNT >$tmp.ls1 _echofull "godown" - src/godown -v -f $SCRATCH_MNT >> $seqres.full + _scratch_shutdown -v -f >> $seqres.full _echofull "unmount" _scratch_unmount >>$seqres.full 2>&1 \ diff --git a/tests/generic/388 b/tests/generic/388 index 4f5a63b9..e0f48218 100755 --- a/tests/generic/388 +++ b/tests/generic/388 @@ -54,6 +54,7 @@ _supported_fs generic _supported_os Linux _require_scratch +_require_local_device $SCRATCH_DEV _require_scratch_shutdown _require_command "$KILLALL_PROG" "killall" @@ -72,7 +73,7 @@ for i in $(seq 1 $((50 * TIME_FACTOR)) ); do # purposely include 0 second sleeps to test shutdown immediately after # recovery sleep $((RANDOM % 3)) - ./src/godown $SCRATCH_MNT + _scratch_shutdown ps -e | grep fsstress > /dev/null 2>&1 while [ $? -eq 0 ]; do diff --git a/tests/generic/392 b/tests/generic/392 index 6922f7d2..9d534138 100755 --- a/tests/generic/392 +++ b/tests/generic/392 @@ -73,7 +73,7 @@ check_inode_metadata() before=`stat "$stat_opt" $testfile` $XFS_IO_PROG -c "$sync_mode" $testfile | _filter_xfs_io - src/godown $SCRATCH_MNT | tee -a $seqres.full + _scratch_shutdown | tee -a $seqres.full _scratch_cycle_mount after=`stat "$stat_opt" $testfile` diff --git a/tests/generic/417 b/tests/generic/417 index 690ceb5d..e66e0aeb 100755 --- a/tests/generic/417 +++ b/tests/generic/417 @@ -75,7 +75,7 @@ function create_dirty_orphans() { sleep 3 echo "godown" - src/godown -v -f $SCRATCH_MNT >> $seqres.full + _scratch_shutdown -v -f >> $seqres.full # kill the multi_open_unlink kill $pid 2>/dev/null diff --git a/tests/generic/461 b/tests/generic/461 index 2f851149..50b9c6d4 100755 --- a/tests/generic/461 +++ b/tests/generic/461 @@ -68,7 +68,7 @@ sync # now shutdown and unmount sleep 5 -$here/src/godown $load_dir +_scratch_shutdown $KILLALL_PROG -q $FSSTRESS_PROG wait diff --git a/tests/generic/468 b/tests/generic/468 index b97a8d63..30c41744 100755 --- a/tests/generic/468 +++ b/tests/generic/468 @@ -84,7 +84,7 @@ check_inode_metadata() before=`stat "$stat_opt" $testfile` $XFS_IO_PROG -c "$sync_mode" $testfile | _filter_xfs_io - $here/src/godown $SCRATCH_MNT | tee -a $seqres.full + _scratch_shutdown | tee -a $seqres.full _scratch_cycle_mount after=`stat "$stat_opt" $testfile`