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>
This commit is contained in:
Chengguang Xu
2017-12-15 15:47:33 +08:00
committed by Eryu Guan
parent db71085194
commit 2b4eae7fd8
19 changed files with 55 additions and 20 deletions
+36 -4
View File
@@ -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
}
+1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1
View File
@@ -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
+1 -1
View File
@@ -80,7 +80,7 @@ sync
# now shutdown and unmount
sleep 5
$here/src/godown $load_dir
_scratch_shutdown
$KILLALL_PROG -q $FSSTRESS_PROG
wait
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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 \
+1 -1
View File
@@ -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 \
+2 -1
View File
@@ -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
+1 -1
View File
@@ -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`
+1 -1
View File
@@ -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
+1 -1
View File
@@ -68,7 +68,7 @@ sync
# now shutdown and unmount
sleep 5
$here/src/godown $load_dir
_scratch_shutdown
$KILLALL_PROG -q $FSSTRESS_PROG
wait
+1 -1
View File
@@ -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`