All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v3] common: xfstests support overlay+tmpfs
@ 2022-05-10  2:04 Baokun Li
  2022-05-10  7:51 ` Amir Goldstein
  0 siblings, 1 reply; 5+ messages in thread
From: Baokun Li @ 2022-05-10  2:04 UTC (permalink / raw)
  To: fstests; +Cc: zlang, guaneryu, amir73il, libaokun1, chengzhihao1, yukuai3

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.

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/

 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"
+			return
+		fi
+		;;
+	esac
+
     if test -n "$opts"; then
 	opts="-o $opts"
     fi
@@ -522,9 +531,17 @@ _test_unmount()
 
 _test_cycle_mount()
 {
-    if [ "$FSTYP" = tmpfs ]; then
-	return
-    fi
+	case "$FSTYP" in
+	tmpfs)
+		return
+		;;
+	overlay)
+		if [ "$OVL_BASE_FSTYP" = tmpfs ]; then
+			return
+		fi
+		;;
+	esac
+
     _test_unmount
     _test_mount
 }
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [RFC v3] common: xfstests support overlay+tmpfs
  2022-05-10  2:04 [RFC v3] common: xfstests support overlay+tmpfs Baokun Li
@ 2022-05-10  7:51 ` Amir Goldstein
  2022-05-10 12:05   ` libaokun (A)
  0 siblings, 1 reply; 5+ messages in thread
From: Amir Goldstein @ 2022-05-10  7:51 UTC (permalink / raw)
  To: Baokun Li; +Cc: fstests, Zorro Lang, Eryu Guan, Zhihao Cheng, yukuai3

On Tue, May 10, 2022 at 4:50 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>
> ---
> 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@huawei.com/
> V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/
>
>  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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC v3] common: xfstests support overlay+tmpfs
  2022-05-10  7:51 ` Amir Goldstein
@ 2022-05-10 12:05   ` libaokun (A)
  2022-05-10 12:12     ` Amir Goldstein
  0 siblings, 1 reply; 5+ messages in thread
From: libaokun (A) @ 2022-05-10 12:05 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: fstests, Zorro Lang, Eryu Guan, Zhihao Cheng, yukuai3, Baokun Li

在 2022/5/10 15:51, Amir Goldstein 写道:
> On Tue, May 10, 2022 at 4:50 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>
>> ---
>> 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@huawei.com/
>> V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/
>>
>>   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.

-- 
With Best Regards,
Baokun Li

.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC v3] common: xfstests support overlay+tmpfs
  2022-05-10 12:05   ` libaokun (A)
@ 2022-05-10 12:12     ` Amir Goldstein
  2022-05-10 12:22       ` libaokun (A)
  0 siblings, 1 reply; 5+ messages in thread
From: Amir Goldstein @ 2022-05-10 12:12 UTC (permalink / raw)
  To: libaokun (A); +Cc: fstests, Zorro Lang, Eryu Guan, Zhihao Cheng, yukuai3

On Tue, May 10, 2022 at 3:05 PM libaokun (A) <libaokun1@huawei.com> wrote:
>
> 在 2022/5/10 15:51, Amir Goldstein 写道:
> > On Tue, May 10, 2022 at 4:50 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>
> >> ---
> >> 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@huawei.com/
> >> V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/
> >>
> >>   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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC v3] common: xfstests support overlay+tmpfs
  2022-05-10 12:12     ` Amir Goldstein
@ 2022-05-10 12:22       ` libaokun (A)
  0 siblings, 0 replies; 5+ messages in thread
From: libaokun (A) @ 2022-05-10 12:22 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: fstests, Zorro Lang, Eryu Guan, Zhihao Cheng, yukuai3, Baokun Li

在 2022/5/10 20:12, Amir Goldstein 写道:
> On Tue, May 10, 2022 at 3:05 PM libaokun (A) <libaokun1@huawei.com> wrote:
>> 在 2022/5/10 15:51, Amir Goldstein 写道:
>>> On Tue, May 10, 2022 at 4:50 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>
>>>> ---
>>>> 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@huawei.com/
>>>> V2: https://patchwork.kernel.org/project/fstests/cover/20220507094524.949615-1-libaokun1@huawei.com/
>>>>
>>>>    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.
> .


Ok, got it! Thank a milion!

-- 
With Best Regards,
Baokun Li
.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-05-10 12:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-10  2:04 [RFC v3] common: xfstests support overlay+tmpfs Baokun Li
2022-05-10  7:51 ` Amir Goldstein
2022-05-10 12:05   ` libaokun (A)
2022-05-10 12:12     ` Amir Goldstein
2022-05-10 12:22       ` libaokun (A)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.