common: xfstests support overlay+tmpfs
The local.config of overlay+tmpfs is as follows:
```local.config.example
export FSTYP=tmpfs
export TEST_DEV=tmpfs_test
export TEST_DIR=/tmp/test
export SCRATCH_DEV=tmpfs_scratch
export SCRATCH_MNT=/tmp/scratch
```
Run `./check -overlay tests` to execute test case on overlay+tmpfs.
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
diff --git a/common/config b/common/config
index efcf12e..c6428f9 100644
--- a/common/config
+++ b/common/config
@@ -612,15 +612,15 @@
[ ! -d "$TEST_DEV" ] || export OVL_BASE_TEST_DIR="$TEST_DEV"
[ ! -d "$SCRATCH_DEV" ] || export OVL_BASE_SCRATCH_MNT="$SCRATCH_DEV"
+ # Config file may specify base fs type, but we obay -overlay flag
+ [ "$FSTYP" == overlay ] || export OVL_BASE_FSTYP="$FSTYP"
+ export FSTYP=overlay
+
# 2. SCRATCH/TEST_DEV point to the base fs partitions. In this case,
# the new OVL_BASE_SCRATCH/TEST_DEV/MNT vars are set to the values
# of the configured base fs and SCRATCH/TEST_DEV vars are set to the
# overlayfs base and mount dirs inside base fs mount.
- [ -b "$TEST_DEV" ] || [ -c "$TEST_DEV" ] || return 0
-
- # Config file may specify base fs type, but we obay -overlay flag
- [ "$FSTYP" == overlay ] || export OVL_BASE_FSTYP="$FSTYP"
- export FSTYP=overlay
+ [ -b "$TEST_DEV" ] || [ -c "$TEST_DEV" ] || [ "$OVL_BASE_FSTYP" == tmpfs ] || return 0
# Store original base fs vars
export OVL_BASE_TEST_DEV="$TEST_DEV"
@@ -636,7 +636,7 @@
export TEST_DIR="$OVL_BASE_TEST_DIR/$OVL_MNT"
export MOUNT_OPTIONS="$OVERLAY_MOUNT_OPTIONS"
- [ -b "$SCRATCH_DEV" ] || [ -c "$SCRATCH_DEV" ] || return 0
+ [ -b "$SCRATCH_DEV" ] || [ -c "$SCRATCH_DEV" ] || [ "$OVL_BASE_FSTYP" == tmpfs ] || return 0
# Store original base fs vars
export OVL_BASE_SCRATCH_DEV="$SCRATCH_DEV"
diff --git a/common/overlay b/common/overlay
index fff67ba..c4e7ee5 100644
--- a/common/overlay
+++ b/common/overlay
@@ -81,7 +81,7 @@
return 1
fi
- _mount $* $dev $mnt
+ _mount -t $OVL_BASE_FSTYP $* $dev $mnt
_idmapped_mount $dev $mnt
}
diff --git a/common/rc b/common/rc
index e907e36..9ba47d3 100644
--- a/common/rc
+++ b/common/rc
@@ -409,15 +409,25 @@
_scratch_cycle_mount()
{
local opts="$1"
+ local unmounted
- if [ "$FSTYP" = tmpfs ]; then
- _scratch_remount "$opts"
- return
- fi
+ case "$FSTYP" in
+ tmpfs)
+ _scratch_remount "$opts"
+ return
+ ;;
+ overlay)
+ if [ "$OVL_BASE_FSTYP" = tmpfs ]; then
+ $UMOUNT_PROG $SCRATCH_MNT
+ unmounted=true
+ fi
+ ;;
+ esac
+
if test -n "$opts"; then
opts="-o $opts"
fi
- _scratch_unmount
+ [ "$unmounted" = true ] || _scratch_unmount
_try_scratch_mount "$opts" || _fail "cycle mount failed"
}
@@ -526,10 +536,21 @@
_test_cycle_mount()
{
- if [ "$FSTYP" = tmpfs ]; then
- return
- fi
- _test_unmount
+ local unmounted
+
+ case "$FSTYP" in
+ tmpfs)
+ return
+ ;;
+ overlay)
+ if [ "$OVL_BASE_FSTYP" = tmpfs ]; then
+ $UMOUNT_PROG $TEST_DIR
+ unmounted=true
+ fi
+ ;;
+ esac
+
+ [ "$unmounted" = true ] || _test_unmount
_test_mount
}