Re: [RFC v3] common: xfstests support overlay+tmpfs

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Tue, May 10, 2022 at 3:05 PM libaokun (A) <libaokun1@xxxxxxxxxx> wrote:
>
> 在 2022/5/10 15:51, Amir Goldstein 写道:
> > On Tue, May 10, 2022 at 4:50 AM Baokun Li <libaokun1@xxxxxxxxxx> 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@xxxxxxxxxx>
> >> ---
> >> V1->V2:
> >>          Fix the bug in version V1 and fix the issue in cycle_mount.
> >> V2->V3:
> >>          Merge two patches into one completed patch.
> >>
> >> V1: https://patchwork.kernel.org/project/fstests/patch/20220424063751.1067376-1-libaokun1@xxxxxxxxxx/
> >> V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@xxxxxxxxxx/
> >>
> >>   common/config  | 12 ++++++------
> >>   common/overlay |  2 +-
> >>   common/rc      | 31 ++++++++++++++++++++++++-------
> >>   3 files changed, 31 insertions(+), 14 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..ca465438 100644
> >> --- a/common/rc
> >> +++ b/common/rc
> >> @@ -410,10 +410,19 @@ _scratch_cycle_mount()
> >>   {
> >>       local opts="$1"
> >>
> >> -    if [ "$FSTYP" = tmpfs ]; then
> >> -       _scratch_remount "$opts"
> >> -       return
> >> -    fi
> >> +       case "$FSTYP" in
> >> +       tmpfs)
> >> +               _scratch_remount "$opts"
> >> +               return
> >> +               ;;
> >> +       overlay)
> >> +               if [ "$OVL_BASE_FSTYP" = tmpfs ]; then
> >> +                       _scratch_remount "$opts"
> >
> > That doesn't look right.
> > _scrtach_cycle_mount is important for several overlay tests and there
> > is no reason to
> > skip it if base fs is tmpfs.
> > What you need to do is cycle mount the overlay without cycle mounting
> > the base fs.
> > You could do something like this:
> >
> >    local unmounted
> > ...
> >
> >    overlay)
> >                 if [ "$OVL_BASE_FSTYP" = tmpfs ]; then
> >                           $UMOUNT_PROG $SCRATCH_MNT
> >                           unmounted=true
> >                 fi
> >                 ;;
> >     esac
> > ...
> >      [ "$unmounted" = true ] || _scratch_unmount
> >      _try_scratch_mount "$opts" || _fail "cycle mount failed"
> > }
> >
> > There are some overlay tests that open code this pattern like overlay/077:
> >
> > # Remove the lower directory and mount overlay again to create
> > # a "former merge dir"
> > $UMOUNT_PROG $SCRATCH_MNT
> > rm -rf $lowerdir/former
> > _scratch_mount
> >
> > So _scratch_mount is expected to work just fine when base fs is already mounted
> > assuming that _check_mounted_on works correctly with tmpfs.
> >
> > Thanks,
> > Amir.
> > .
>
> Thank you very much for your advice.
>
> I will send a patch V4 with the changes suggested by you.

To state the obvious that I did not say, please do the same with
_test_cycle_mount

Thanks,
Amir.




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux