mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user