mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
overlay: correct scratch dirs check
Tests that use _overlay_scratch_mount_dirs instead of _scratch_mount should use _require_scratch_nocheck instead of _require_scratch because these tests are either mounting with multiple lower dirs or mounting with non-default lower/upper/work dir, so _check_overlay_scratch_fs won't handle these cases correctly. So we introduce _overlay_check_scratch_dirs helper and should call this helper with the correct dir arguments for these non-default cases. This patch modify these tests to optionally call _overlay_check_scratch_dirs at the end of the test or after _scratch_umount to mount base filesystem only and run the checker. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
@@ -219,6 +219,35 @@ _overlay_check_dirs()
|
||||
return $err
|
||||
}
|
||||
|
||||
# Check the same mnt/dev of _check_overlay_scratch_fs but non-default
|
||||
# underlying scratch dirs of overlayfs, it needs lower/upper/work dirs
|
||||
# provided as arguments, and it's useful for non-default setups such
|
||||
# as multiple lower layers
|
||||
_overlay_check_scratch_dirs()
|
||||
{
|
||||
local lowerdir=$1
|
||||
local upperdir=$2
|
||||
local workdir=$3
|
||||
shift 3
|
||||
|
||||
# Need to umount overlay for scratch dir check
|
||||
local ovl_mounted=`_is_dir_mountpoint $SCRATCH_MNT`
|
||||
[ -z "$ovl_mounted" ] || $UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
# Check dirs with extra overlay options
|
||||
_overlay_check_dirs $lowerdir $upperdir $workdir $*
|
||||
local ret=$?
|
||||
|
||||
if [ $ret -eq 0 -a -n "$ovl_mounted" ]; then
|
||||
# overlay was mounted, remount with extra mount options
|
||||
_overlay_scratch_mount_dirs $lowerdir $upperdir \
|
||||
$workdir $*
|
||||
ret=$?
|
||||
fi
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
_overlay_check_fs()
|
||||
{
|
||||
# The first arguments is overlay mount point use for checking
|
||||
|
||||
+6
-1
@@ -54,7 +54,9 @@ rm -f $seqres.full
|
||||
# Modify as appropriate.
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_loop
|
||||
|
||||
# Remove all files from previous tests
|
||||
@@ -102,6 +104,9 @@ $XFS_IO_PROG -f -c "o" ${SCRATCH_MNT}/test_file \
|
||||
# unmount overlayfs
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerd $upperd $workd
|
||||
|
||||
# unmount undelying xfs, this tiggers panic if memleak happens
|
||||
$UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/uppermnt
|
||||
$UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/lowermnt
|
||||
|
||||
+6
-1
@@ -48,7 +48,9 @@ rm -f $seqres.full
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
|
||||
# Remove all files from previous tests
|
||||
_scratch_mkfs
|
||||
@@ -70,6 +72,9 @@ mknod $lowerdir2/testdir/a c 0 0
|
||||
_overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
|
||||
rm -rf $SCRATCH_MNT/testdir
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
|
||||
|
||||
# success, all done
|
||||
echo "Silence is golden"
|
||||
status=0
|
||||
|
||||
+9
-1
@@ -53,7 +53,9 @@ rm -f $seqres.full
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
|
||||
# Remove all files from previous tests
|
||||
_scratch_mkfs
|
||||
@@ -78,6 +80,9 @@ mkdir -p $SCRATCH_MNT/testdir/visibledir
|
||||
# unmount overlayfs but not base fs
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir1 $lowerdir2 $workdir2
|
||||
|
||||
# mount overlay again, with lowerdir1 and lowerdir2 as multiple lowerdirs,
|
||||
# and create a new file in testdir, triggers copyup from lowerdir,
|
||||
# copyup should not copy overlayfs private xattr
|
||||
@@ -90,6 +95,9 @@ $UMOUNT_PROG $SCRATCH_MNT
|
||||
_overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
|
||||
ls $SCRATCH_MNT/testdir
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
|
||||
|
||||
# success, all done
|
||||
status=0
|
||||
exit
|
||||
|
||||
+6
-1
@@ -51,7 +51,9 @@ rm -f $seqres.full
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_chattr i
|
||||
|
||||
# Remove all files from previous tests
|
||||
@@ -81,6 +83,9 @@ _overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir
|
||||
touch $SCRATCH_MNT/bar 2>&1 | _filter_scratch
|
||||
_scratch_remount rw 2>&1 | _filter_ro_mount
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir2 $upperdir $workdir
|
||||
|
||||
# success, all done
|
||||
status=0
|
||||
exit
|
||||
|
||||
+5
-1
@@ -69,7 +69,9 @@ rm -f $seqres.full
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_scratch_feature index
|
||||
|
||||
# Remove all files from previous tests
|
||||
@@ -110,6 +112,8 @@ _overlay_mount_dirs $lowerdir $upperdir $workdir2 \
|
||||
_overlay_mount_dirs $lowerdir2 $upperdir2 $workdir \
|
||||
overlay3 $SCRATCH_MNT -oindex=on 2>&1 | _filter_busy_mount
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir
|
||||
|
||||
# success, all done
|
||||
status=0
|
||||
|
||||
+6
-1
@@ -55,7 +55,9 @@ rm -f $seqres.full
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_scratch_feature index
|
||||
|
||||
# Remove all files from previous tests
|
||||
@@ -87,6 +89,9 @@ $UMOUNT_PROG $SCRATCH_MNT 2>/dev/null
|
||||
# Mount overlay with original lowerdir, upperdir, workdir and index=on - expect success
|
||||
_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -oindex=on
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -oindex=on
|
||||
|
||||
# success, all done
|
||||
status=0
|
||||
exit
|
||||
|
||||
+9
-1
@@ -46,7 +46,9 @@ _cleanup()
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_attrs
|
||||
_require_test_program "t_dir_type"
|
||||
|
||||
@@ -163,6 +165,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
|
||||
|
||||
_scratch_unmount
|
||||
|
||||
# check overlayfs
|
||||
_check_scratch_fs
|
||||
|
||||
# Verify pure lower residing in dir which has another lower layer
|
||||
_scratch_mkfs
|
||||
|
||||
@@ -202,6 +207,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
|
||||
[[ $subdir_d == "subdir d" ]] || \
|
||||
echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir"
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir
|
||||
|
||||
echo "Silence is golden"
|
||||
status=0
|
||||
exit
|
||||
|
||||
+9
-1
@@ -48,7 +48,9 @@ _cleanup()
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_test
|
||||
_require_attrs
|
||||
_require_test_program "t_dir_type"
|
||||
@@ -168,6 +170,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
|
||||
|
||||
_scratch_unmount
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir
|
||||
|
||||
# Verify pure lower residing in dir which has another lower layer
|
||||
middir=$OVL_BASE_TEST_DIR/$seq-ovl-mid
|
||||
lowerdir=$OVL_BASE_TEST_DIR/$seq-ovl-lower
|
||||
@@ -206,6 +211,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino)
|
||||
[[ $subdir_d == "subdir d" ]] || \
|
||||
echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir"
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir
|
||||
|
||||
echo "Silence is golden"
|
||||
status=0
|
||||
exit
|
||||
|
||||
+6
-1
@@ -56,7 +56,9 @@ _cleanup()
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_test
|
||||
_require_test_program "af_unix"
|
||||
_require_test_program "t_dir_type"
|
||||
@@ -153,6 +155,9 @@ _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir
|
||||
# Compare inode numbers before/after mount cycle
|
||||
check_inode_numbers $testdir $tmp.after_move $tmp.after_cycle
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir
|
||||
|
||||
echo "Silence is golden"
|
||||
status=0
|
||||
exit
|
||||
|
||||
+7
-1
@@ -49,7 +49,9 @@ _cleanup()
|
||||
# real QA test starts here
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
_require_test
|
||||
_require_scratch_feature index
|
||||
_require_test_program "t_dir_type"
|
||||
@@ -122,6 +124,7 @@ check_ino_nlink $SCRATCH_MNT $tmp.before $tmp.after_one
|
||||
|
||||
# Verify that the hardlinks survive a mount cycle
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on
|
||||
_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -o index=on
|
||||
|
||||
echo "== After mount cycle =="
|
||||
@@ -138,5 +141,8 @@ echo "== After write two =="
|
||||
cat $FILES
|
||||
check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_two
|
||||
|
||||
# check overlayfs
|
||||
_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on
|
||||
|
||||
status=0
|
||||
exit
|
||||
|
||||
+8
-2
@@ -61,8 +61,10 @@ _cleanup()
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_test
|
||||
_require_scratch
|
||||
_require_test_program "open_by_handle"
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
# We need to require both features together, because nfs_export cannot
|
||||
# be enabled when index is disabled
|
||||
_require_scratch_overlay_features index nfs_export
|
||||
@@ -122,10 +124,14 @@ mount_dirs()
|
||||
-o "index=on,nfs_export=on"
|
||||
}
|
||||
|
||||
# Unmount the overlay without unmounting base fs
|
||||
# Unmount the overlay without unmounting base fs and check the
|
||||
# underlying dirs
|
||||
unmount_dirs()
|
||||
{
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
_overlay_check_scratch_dirs $middle:$lower $upper $work \
|
||||
-o "index=on,nfs_export=on"
|
||||
}
|
||||
|
||||
# Check non-stale file handles of lower/upper files and verify
|
||||
|
||||
+8
-2
@@ -63,8 +63,10 @@ _cleanup()
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_test
|
||||
_require_scratch
|
||||
_require_test_program "open_by_handle"
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
# We need to require all features together, because nfs_export cannot
|
||||
# be enabled when index is disabled
|
||||
_require_scratch_overlay_features index nfs_export redirect_dir
|
||||
@@ -118,10 +120,14 @@ mount_dirs()
|
||||
-o "index=on,nfs_export=on,redirect_dir=on"
|
||||
}
|
||||
|
||||
# Unmount the overlay without unmounting base fs
|
||||
# Unmount the overlay without unmounting base fs and check the
|
||||
# underlying dirs
|
||||
unmount_dirs()
|
||||
{
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
_overlay_check_scratch_dirs $middle:$lower $upper $work \
|
||||
-o "index=on,nfs_export=on,redirect_dir=on"
|
||||
}
|
||||
|
||||
# Check non-stale file handles of lower/upper moved files
|
||||
|
||||
+8
-2
@@ -67,8 +67,10 @@ _cleanup()
|
||||
_supported_fs overlay
|
||||
_supported_os Linux
|
||||
_require_test
|
||||
_require_scratch
|
||||
_require_test_program "open_by_handle"
|
||||
# Use non-default scratch underlying overlay dirs, we need to check
|
||||
# them explicity after test.
|
||||
_require_scratch_nocheck
|
||||
# We need to require all features together, because nfs_export cannot
|
||||
# be enabled when index is disabled
|
||||
_require_scratch_overlay_features index nfs_export redirect_dir
|
||||
@@ -122,10 +124,14 @@ mount_dirs()
|
||||
-o "index=on,nfs_export=on,redirect_dir=on"
|
||||
}
|
||||
|
||||
# Unmount the overlay without unmounting base fs
|
||||
# Unmount the overlay without unmounting base fs and check the
|
||||
# underlying dirs
|
||||
unmount_dirs()
|
||||
{
|
||||
$UMOUNT_PROG $SCRATCH_MNT
|
||||
|
||||
_overlay_check_scratch_dirs $middle:$lower $upper $work \
|
||||
-o "index=on,nfs_export=on,redirect_dir=on"
|
||||
}
|
||||
|
||||
# Check file handles of dir with ancestor under lower redirect
|
||||
|
||||
Reference in New Issue
Block a user