diff mbox series

common/overlay: source base fs specific common file

Message ID 20220512175603.2833164-1-zlang@kernel.org (mailing list archive)
State New, archived
Headers show
Series common/overlay: source base fs specific common file | expand

Commit Message

Zorro Lang May 12, 2022, 5:56 p.m. UTC
When tests overlayfs, sometimes we need the underlying fs specific
helpers, e.g. common/rc has:
  _filesystem_timestamp_range $OVL_BASE_TEST_DEV $OVL_BASE_FSTYP

So when we source common/overlay, better to source then OVL_BASE_FSTYP
too.

Signed-off-by: Zorro Lang <zlang@kernel.org>
---

The generic/402 always fails on overlayfs as:

  QA output created by 402
  ./common/rc: line 2441: _xfs_timestamp_range: command not found
  ./common/rc: line 2403: [: syntax error: '-1' unexpected
  ./common/rc: line 2408: [: -le: unary operator expected
  ./common/rc: line 2441: _xfs_timestamp_range: command not found
  0;0 != 1;1
  0;0 != 1;1
  Silence is golden

Due to if FSTYP is overlay, we only source common/overlay file. But we
still need the helpers of the underlying filesystem. So I think we need
to source the common/$OVL_BASE_FSTYP in common/overlay. What do you think?

Thanks,
Zorro


 common/config  | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
 common/overlay |  4 ++++
 common/rc      | 49 +----------------------------------------
 3 files changed, 64 insertions(+), 48 deletions(-)

Comments

Amir Goldstein May 12, 2022, 6:11 p.m. UTC | #1
On Thu, May 12, 2022 at 8:56 PM Zorro Lang <zlang@kernel.org> wrote:
>
> When tests overlayfs, sometimes we need the underlying fs specific
> helpers, e.g. common/rc has:
>   _filesystem_timestamp_range $OVL_BASE_TEST_DEV $OVL_BASE_FSTYP
>
> So when we source common/overlay, better to source then OVL_BASE_FSTYP
> too.
>
> Signed-off-by: Zorro Lang <zlang@kernel.org>
> ---
>
> The generic/402 always fails on overlayfs as:
>
>   QA output created by 402
>   ./common/rc: line 2441: _xfs_timestamp_range: command not found
>   ./common/rc: line 2403: [: syntax error: '-1' unexpected
>   ./common/rc: line 2408: [: -le: unary operator expected
>   ./common/rc: line 2441: _xfs_timestamp_range: command not found
>   0;0 != 1;1
>   0;0 != 1;1
>   Silence is golden
>
> Due to if FSTYP is overlay, we only source common/overlay file. But we
> still need the helpers of the underlying filesystem. So I think we need
> to source the common/$OVL_BASE_FSTYP in common/overlay. What do you think?

That makes sense.
I don't know why I have never hit this.
Maybe because I am not running with multi section config or
because I am runing with kvm-xfstests runner.

Thanks,
Amir.
Zorro Lang May 12, 2022, 6:29 p.m. UTC | #2
On Thu, May 12, 2022 at 09:11:34PM +0300, Amir Goldstein wrote:
> On Thu, May 12, 2022 at 8:56 PM Zorro Lang <zlang@kernel.org> wrote:
> >
> > When tests overlayfs, sometimes we need the underlying fs specific
> > helpers, e.g. common/rc has:
> >   _filesystem_timestamp_range $OVL_BASE_TEST_DEV $OVL_BASE_FSTYP
> >
> > So when we source common/overlay, better to source then OVL_BASE_FSTYP
> > too.
> >
> > Signed-off-by: Zorro Lang <zlang@kernel.org>
> > ---
> >
> > The generic/402 always fails on overlayfs as:
> >
> >   QA output created by 402
> >   ./common/rc: line 2441: _xfs_timestamp_range: command not found
> >   ./common/rc: line 2403: [: syntax error: '-1' unexpected
> >   ./common/rc: line 2408: [: -le: unary operator expected
> >   ./common/rc: line 2441: _xfs_timestamp_range: command not found
> >   0;0 != 1;1
> >   0;0 != 1;1
> >   Silence is golden
> >
> > Due to if FSTYP is overlay, we only source common/overlay file. But we
> > still need the helpers of the underlying filesystem. So I think we need
> > to source the common/$OVL_BASE_FSTYP in common/overlay. What do you think?
> 
> That makes sense.

I haven't given it enough test, hope it won't break something:)

> I don't know why I have never hit this.
> Maybe because I am not running with multi section config or
> because I am runing with kvm-xfstests runner.

Do you test overlay with XFS? For now, I think only xfs+overlay can reproduce
this failure.

Thanks,
Zorro

> 
> Thanks,
> Amir.
>
Amir Goldstein May 13, 2022, 12:54 a.m. UTC | #3
On Thu, May 12, 2022 at 9:29 PM Zorro Lang <zlang@kernel.org> wrote:
>
> On Thu, May 12, 2022 at 09:11:34PM +0300, Amir Goldstein wrote:
> > On Thu, May 12, 2022 at 8:56 PM Zorro Lang <zlang@kernel.org> wrote:
> > >
> > > When tests overlayfs, sometimes we need the underlying fs specific
> > > helpers, e.g. common/rc has:
> > >   _filesystem_timestamp_range $OVL_BASE_TEST_DEV $OVL_BASE_FSTYP
> > >
> > > So when we source common/overlay, better to source then OVL_BASE_FSTYP
> > > too.
> > >
> > > Signed-off-by: Zorro Lang <zlang@kernel.org>
> > > ---
> > >
> > > The generic/402 always fails on overlayfs as:
> > >
> > >   QA output created by 402
> > >   ./common/rc: line 2441: _xfs_timestamp_range: command not found
> > >   ./common/rc: line 2403: [: syntax error: '-1' unexpected
> > >   ./common/rc: line 2408: [: -le: unary operator expected
> > >   ./common/rc: line 2441: _xfs_timestamp_range: command not found
> > >   0;0 != 1;1
> > >   0;0 != 1;1
> > >   Silence is golden
> > >
> > > Due to if FSTYP is overlay, we only source common/overlay file. But we
> > > still need the helpers of the underlying filesystem. So I think we need
> > > to source the common/$OVL_BASE_FSTYP in common/overlay. What do you think?
> >
> > That makes sense.
>
> I haven't given it enough test, hope it won't break something:)
>
> > I don't know why I have never hit this.
> > Maybe because I am not running with multi section config or
> > because I am runing with kvm-xfstests runner.
>
> Do you test overlay with XFS? For now, I think only xfs+overlay can reproduce
> this failure.

I only test xfs+overlay.
And Darrick also tests this regularly for xfs regression test,
so it must be a different way in which we invoke the test.

Thanks,
Amir.
diff mbox series

Patch

diff --git a/common/config b/common/config
index efcf12e9..b4b2a8d4 100644
--- a/common/config
+++ b/common/config
@@ -481,6 +481,65 @@  _fsck_opts()
 	esac
 }
 
+_source_specific_fs()
+{
+	local fs=$1
+
+	if [ -z "$fs" ];then
+		fs=$FSTYP
+	fi
+
+	case "$fs" in
+	xfs)
+		[ "$XFS_LOGPRINT_PROG" = "" ] && _fatal "xfs_logprint not found"
+		[ "$XFS_REPAIR_PROG" = "" ] && _fatal "xfs_repair not found"
+		[ "$XFS_DB_PROG" = "" ] && _fatal "xfs_db not found"
+		[ "$MKFS_XFS_PROG" = "" ] && _fatal "mkfs_xfs not found"
+		[ "$XFS_INFO_PROG" = "" ] && _fatal "xfs_info not found"
+
+		. ./common/xfs
+		;;
+	udf)
+		[ "$MKFS_UDF_PROG" = "" ] && _fatal "mkfs_udf/mkudffs not found"
+		;;
+	btrfs)
+		[ "$MKFS_BTRFS_PROG" = "" ] && _fatal "mkfs.btrfs not found"
+
+		. ./common/btrfs
+		;;
+	ext4)
+		[ "$MKFS_EXT4_PROG" = "" ] && _fatal "mkfs.ext4 not found"
+		;;
+	f2fs)
+		[ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
+		;;
+	nfs)
+		. ./common/nfs
+		;;
+	cifs)
+		;;
+	9p)
+		;;
+	ceph)
+		. ./common/ceph
+		;;
+	glusterfs)
+		;;
+	overlay)
+		. ./common/overlay
+		;;
+	reiser4)
+		[ "$MKFS_REISER4_PROG" = "" ] && _fatal "mkfs.reiser4 not found"
+		;;
+	pvfs2)
+		;;
+	ubifs)
+		[ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
+		;;
+	esac
+}
+
+
 known_hosts()
 {
 	[ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs
diff --git a/common/overlay b/common/overlay
index fff67ba1..4708d393 100644
--- a/common/overlay
+++ b/common/overlay
@@ -12,6 +12,10 @@  export OVL_XATTR_NLINK="trusted.overlay.nlink"
 export OVL_XATTR_UPPER="trusted.overlay.upper"
 export OVL_XATTR_METACOPY="trusted.overlay.metacopy"
 
+if [ -n "$OVL_BASE_FSTYP" ];then
+	_source_specific_fs $OVL_BASE_FSTYP
+fi
+
 # helper function to do the actual overlayfs mount operation
 _overlay_mount_dirs()
 {
diff --git a/common/rc b/common/rc
index e907e362..ebdeeb93 100644
--- a/common/rc
+++ b/common/rc
@@ -96,54 +96,7 @@  _log_err()
 umask 022
 
 # check for correct setup and source the $FSTYP specific functions now
-case "$FSTYP" in
-    xfs)
-	 [ "$XFS_LOGPRINT_PROG" = "" ] && _fatal "xfs_logprint not found"
-	 [ "$XFS_REPAIR_PROG" = "" ] && _fatal "xfs_repair not found"
-	 [ "$XFS_DB_PROG" = "" ] && _fatal "xfs_db not found"
-	 [ "$MKFS_XFS_PROG" = "" ] && _fatal "mkfs_xfs not found"
-	 [ "$XFS_INFO_PROG" = "" ] && _fatal "xfs_info not found"
-
-	 . ./common/xfs
-	 ;;
-    udf)
-	 [ "$MKFS_UDF_PROG" = "" ] && _fatal "mkfs_udf/mkudffs not found"
-	 ;;
-    btrfs)
-	 [ "$MKFS_BTRFS_PROG" = "" ] && _fatal "mkfs.btrfs not found"
-
-	 . ./common/btrfs
-	 ;;
-    ext4)
-	 [ "$MKFS_EXT4_PROG" = "" ] && _fatal "mkfs.ext4 not found"
-	 ;;
-    f2fs)
-	 [ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
-	 ;;
-    nfs)
-	 . ./common/nfs
-	 ;;
-    cifs)
-	 ;;
-    9p)
-	 ;;
-    ceph)
-	 . ./common/ceph
-	 ;;
-    glusterfs)
-	 ;;
-    overlay)
-	 . ./common/overlay
-	 ;;
-    reiser4)
-	 [ "$MKFS_REISER4_PROG" = "" ] && _fatal "mkfs.reiser4 not found"
-	 ;;
-    pvfs2)
-	;;
-    ubifs)
-	[ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
-	;;
-esac
+_source_specific_fs $FSTYP
 
 if [ ! -z "$REPORT_LIST" ]; then
 	. ./common/report