diff options
author | Chengguang Xu <cgxu519@icloud.com> | 2017-12-15 15:47:33 +0800 |
---|---|---|
committer | Eryu Guan <eguan@redhat.com> | 2017-12-24 21:30:58 +0800 |
commit | 2b4eae7fd825ffe2a966b2b1d8a040dcb999edf7 (patch) | |
tree | 5808928a25fdfa4bc6db8c7178d9154cdda48221 | |
parent | db71085194be8e96d4d94156f4c88f47a747e395 (diff) | |
download | xfstests-2b4eae7fd825ffe2a966b2b1d8a040dcb999edf7.tar.gz |
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 <cgxu519@icloud.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
-rw-r--r-- | common/rc | 40 | ||||
-rwxr-xr-x | tests/generic/042 | 1 | ||||
-rwxr-xr-x | tests/generic/043 | 2 | ||||
-rwxr-xr-x | tests/generic/044 | 2 | ||||
-rwxr-xr-x | tests/generic/045 | 2 | ||||
-rwxr-xr-x | tests/generic/046 | 2 | ||||
-rwxr-xr-x | tests/generic/047 | 2 | ||||
-rwxr-xr-x | tests/generic/048 | 2 | ||||
-rwxr-xr-x | tests/generic/049 | 2 | ||||
-rwxr-xr-x | tests/generic/050 | 1 | ||||
-rwxr-xr-x | tests/generic/051 | 2 | ||||
-rwxr-xr-x | tests/generic/052 | 2 | ||||
-rwxr-xr-x | tests/generic/054 | 2 | ||||
-rwxr-xr-x | tests/generic/055 | 2 | ||||
-rwxr-xr-x | tests/generic/388 | 3 | ||||
-rwxr-xr-x | tests/generic/392 | 2 | ||||
-rwxr-xr-x | tests/generic/417 | 2 | ||||
-rwxr-xr-x | tests/generic/461 | 2 | ||||
-rwxr-xr-x | tests/generic/468 | 2 |
19 files changed, 55 insertions, 20 deletions
@@ -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 68ff03c655..00b3a34636 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 5dadab32bb..f61222ce3d 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 804b1b17c2..f327ee0bf2 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 5fa7b09f99..53489108cf 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 bf38d53abe..1155ee9877 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 7d09b04c69..66965f25ca 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 ae561fcabc..fd9fcd9291 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 ef2b44c46a..0003046bbc 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 efa45f0482..dbf0ac5cd1 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 29ac61b600..129a4668aa 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 cf0f456800..126f08e633 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 db4150094b..12f471a190 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 1bbe3108c4..c543e75179 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 4f5a63b98f..e0f4821822 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 6922f7d2a8..9d53413892 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 690ceb5d16..e66e0aeb7a 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 2f85114948..50b9c6d4fb 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 b97a8d6348..30c41744ba 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` |