Message ID | 20220511083404.3315147-1-libaokun1@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [RFC,v4] common: xfstests support overlay+tmpfs | expand |
On Wed, May 11, 2022 at 11:20 AM Baokun Li <libaokun1@huawei.com> wrote: > > 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> > --- > V1->V2: > Fix the bug in version V1 and fix the issue in cycle_mount. > V2->V3: > Merge two patches into one completed patch. > V3->V4: > Cycle mount the overlay without cycle mounting the base fs. > > V1: https://patchwork.kernel.org/project/fstests/patch/20220424063751.1067376-1-libaokun1@huawei.com/ > V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/ > V3: https://patchwork.kernel.org/project/fstests/patch/20220510020434.2561224-1-libaokun1@huawei.com/ > > common/config | 12 ++++++------ > common/overlay | 2 +- > common/rc | 39 ++++++++++++++++++++++++++++++--------- > 3 files changed, 37 insertions(+), 16 deletions(-) > > diff --git a/common/config b/common/config > index 1033b890..d5953176 100644 > --- a/common/config > +++ b/common/config > @@ -610,15 +610,15 @@ _overlay_config_override() > [ ! -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" > @@ -634,7 +634,7 @@ _overlay_config_override() > 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 fff67ba1..c4e7ee58 100644 > --- a/common/overlay > +++ b/common/overlay > @@ -81,7 +81,7 @@ _overlay_base_mount() > 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 553ae350..0d50cc22 100644 > --- a/common/rc > +++ b/common/rc > @@ -409,15 +409,25 @@ _scratch_remount() > _scratch_cycle_mount() > { > local opts="$1" > + local unmounted > + > + case "$FSTYP" in > + tmpfs) > + _scratch_remount "$opts" > + return > + ;; > + overlay) > + if [ "$OVL_BASE_FSTYP" = tmpfs ]; then > + $UMOUNT_PROG $SCRATCH_MNT > + unmounted=true > + fi > + ;; > + esac > > - if [ "$FSTYP" = tmpfs ]; then > - _scratch_remount "$opts" > - return > - fi > if test -n "$opts"; then > opts="-o $opts" > fi > - _scratch_unmount > + [ "$unmounted" = true ] || _scratch_unmount > _try_scratch_mount "$opts" || _fail "cycle mount failed" > } > > @@ -522,10 +532,21 @@ _test_unmount() > > _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 > } > > -- > 2.31.1 >
diff --git a/common/config b/common/config index 1033b890..d5953176 100644 --- a/common/config +++ b/common/config @@ -610,15 +610,15 @@ _overlay_config_override() [ ! -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" @@ -634,7 +634,7 @@ _overlay_config_override() 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 fff67ba1..c4e7ee58 100644 --- a/common/overlay +++ b/common/overlay @@ -81,7 +81,7 @@ _overlay_base_mount() 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 553ae350..0d50cc22 100644 --- a/common/rc +++ b/common/rc @@ -409,15 +409,25 @@ _scratch_remount() _scratch_cycle_mount() { local opts="$1" + local unmounted + + case "$FSTYP" in + tmpfs) + _scratch_remount "$opts" + return + ;; + overlay) + if [ "$OVL_BASE_FSTYP" = tmpfs ]; then + $UMOUNT_PROG $SCRATCH_MNT + unmounted=true + fi + ;; + esac - if [ "$FSTYP" = tmpfs ]; then - _scratch_remount "$opts" - return - fi if test -n "$opts"; then opts="-o $opts" fi - _scratch_unmount + [ "$unmounted" = true ] || _scratch_unmount _try_scratch_mount "$opts" || _fail "cycle mount failed" } @@ -522,10 +532,21 @@ _test_unmount() _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 }
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> --- V1->V2: Fix the bug in version V1 and fix the issue in cycle_mount. V2->V3: Merge two patches into one completed patch. V3->V4: Cycle mount the overlay without cycle mounting the base fs. V1: https://patchwork.kernel.org/project/fstests/patch/20220424063751.1067376-1-libaokun1@huawei.com/ V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/ V3: https://patchwork.kernel.org/project/fstests/patch/20220510020434.2561224-1-libaokun1@huawei.com/ common/config | 12 ++++++------ common/overlay | 2 +- common/rc | 39 ++++++++++++++++++++++++++++++--------- 3 files changed, 37 insertions(+), 16 deletions(-)