linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] Minor cleanups in common/rc
@ 2025-03-06  8:17 Nirjhar Roy (IBM)
  2025-03-06  8:17 ` [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
  2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
  0 siblings, 2 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-06  8:17 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

This patch series removes some unnecessary sourcing of common/rc
and decouples the call to init_rc() from the sourcing of common/rc.
The individual patches have the details. This is proposed in [1] and [2].

[1] https://lore.kernel.org/all/20250206155251.GA21787@frogsfrogsfrogs/

[2] https://lore.kernel.org/all/20250210142322.tptpphdntglsz4eq@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com/

Nirjhar Roy (IBM) (2):
  generic/749: Remove redundant sourcing of common/rc
  check,common/{preamble,rc},soak: Decoupling init_rc() call from
    sourcing common/rc

 check             | 10 ++--------
 common/preamble   |  1 +
 common/rc         |  2 --
 soak              |  1 +
 tests/generic/749 |  1 -
 5 files changed, 4 insertions(+), 11 deletions(-)

--
2.34.1


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

* [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc
  2025-03-06  8:17 [PATCH v1 0/2] Minor cleanups in common/rc Nirjhar Roy (IBM)
@ 2025-03-06  8:17 ` Nirjhar Roy (IBM)
  2025-03-06 17:41   ` Darrick J. Wong
  2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
  1 sibling, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-06  8:17 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

common/rc is already sourced before the test starts running
in _begin_fstest() preamble.

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
---
 tests/generic/749 | 1 -
 1 file changed, 1 deletion(-)

diff --git a/tests/generic/749 b/tests/generic/749
index fc747738..451f283e 100755
--- a/tests/generic/749
+++ b/tests/generic/749
@@ -15,7 +15,6 @@
 # boundary and ensures we get a SIGBUS if we write to data beyond the system
 # page size even if the block size is greater than the system page size.
 . ./common/preamble
-. ./common/rc
 _begin_fstest auto quick prealloc
 
 # Import common functions.
-- 
2.34.1


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

* [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06  8:17 [PATCH v1 0/2] Minor cleanups in common/rc Nirjhar Roy (IBM)
  2025-03-06  8:17 ` [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
@ 2025-03-06  8:17 ` Nirjhar Roy (IBM)
  2025-03-06 17:46   ` Darrick J. Wong
                     ` (2 more replies)
  1 sibling, 3 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-06  8:17 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

Silently executing scripts during sourcing common/rc doesn't look good
and also causes unnecessary script execution. Decouple init_rc() call
and call init_rc() explicitly where required.

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
---
 check           | 10 ++--------
 common/preamble |  1 +
 common/rc       |  2 --
 soak            |  1 +
 4 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/check b/check
index ea92b0d6..d30af1ba 100755
--- a/check
+++ b/check
@@ -840,16 +840,8 @@ function run_section()
 		_prepare_test_list
 	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
 		_test_unmount 2> /dev/null
-		if ! _test_mount
-		then
-			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
-			status=1
-			exit
-		fi
 	fi
 
-	init_rc
-
 	seq="check.$$"
 	check="$RESULT_BASE/check"
 
@@ -870,6 +862,8 @@ function run_section()
 	needwrap=true
 
 	if [ ! -z "$SCRATCH_DEV" ]; then
+		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
+		[ $? -le 1 ] || exit 1
 	  _scratch_unmount 2> /dev/null
 	  # call the overridden mkfs - make sure the FS is built
 	  # the same as we'll create it later.
diff --git a/common/preamble b/common/preamble
index 0c9ee2e0..c92e55bb 100644
--- a/common/preamble
+++ b/common/preamble
@@ -50,6 +50,7 @@ _begin_fstest()
 	_register_cleanup _cleanup
 
 	. ./common/rc
+	init_rc
 
 	# remove previous $seqres.full before test
 	rm -f $seqres.full $seqres.hints
diff --git a/common/rc b/common/rc
index d2de8588..f153ad81 100644
--- a/common/rc
+++ b/common/rc
@@ -5754,8 +5754,6 @@ _require_program() {
 	_have_program "$1" || _notrun "$tag required"
 }
 
-init_rc
-
 ################################################################################
 # make sure this script returns success
 /bin/true
diff --git a/soak b/soak
index d5c4229a..5734d854 100755
--- a/soak
+++ b/soak
@@ -5,6 +5,7 @@
 
 # get standard environment, filters and checks
 . ./common/rc
+# ToDo: Do we need an init_rc() here? How is soak used?
 . ./common/filter
 
 tmp=/tmp/$$
-- 
2.34.1


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

* Re: [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc
  2025-03-06  8:17 ` [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
@ 2025-03-06 17:41   ` Darrick J. Wong
  0 siblings, 0 replies; 17+ messages in thread
From: Darrick J. Wong @ 2025-03-06 17:41 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david

On Thu, Mar 06, 2025 at 08:17:40AM +0000, Nirjhar Roy (IBM) wrote:
> common/rc is already sourced before the test starts running
> in _begin_fstest() preamble.
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>

Yeah, that sourceing shouldn't be necessary.
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  tests/generic/749 | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/tests/generic/749 b/tests/generic/749
> index fc747738..451f283e 100755
> --- a/tests/generic/749
> +++ b/tests/generic/749
> @@ -15,7 +15,6 @@
>  # boundary and ensures we get a SIGBUS if we write to data beyond the system
>  # page size even if the block size is greater than the system page size.
>  . ./common/preamble
> -. ./common/rc
>  _begin_fstest auto quick prealloc
>  
>  # Import common functions.
> -- 
> 2.34.1
> 
> 

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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
@ 2025-03-06 17:46   ` Darrick J. Wong
  2025-03-07  5:51     ` Nirjhar Roy (IBM)
  2025-03-06 21:13   ` Zorro Lang
  2025-03-06 21:30   ` Dave Chinner
  2 siblings, 1 reply; 17+ messages in thread
From: Darrick J. Wong @ 2025-03-06 17:46 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david

On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> Silently executing scripts during sourcing common/rc doesn't look good
> and also causes unnecessary script execution. Decouple init_rc() call
> and call init_rc() explicitly where required.
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---
>  check           | 10 ++--------
>  common/preamble |  1 +
>  common/rc       |  2 --
>  soak            |  1 +
>  4 files changed, 4 insertions(+), 10 deletions(-)
> 
> diff --git a/check b/check
> index ea92b0d6..d30af1ba 100755
> --- a/check
> +++ b/check
> @@ -840,16 +840,8 @@ function run_section()
>  		_prepare_test_list
>  	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
>  		_test_unmount 2> /dev/null
> -		if ! _test_mount
> -		then
> -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
> -			status=1
> -			exit
> -		fi

Unrelated change?  I was expecting a mechanical ". ./common/rc" =>
". ./common/rc ; init_rc" change in this patch.

>  	fi
>  
> -	init_rc

Why remove init_rc here?

> -
>  	seq="check.$$"
>  	check="$RESULT_BASE/check"
>  
> @@ -870,6 +862,8 @@ function run_section()
>  	needwrap=true
>  
>  	if [ ! -z "$SCRATCH_DEV" ]; then
> +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
> +		[ $? -le 1 ] || exit 1
>  	  _scratch_unmount 2> /dev/null
>  	  # call the overridden mkfs - make sure the FS is built
>  	  # the same as we'll create it later.
> diff --git a/common/preamble b/common/preamble
> index 0c9ee2e0..c92e55bb 100644
> --- a/common/preamble
> +++ b/common/preamble
> @@ -50,6 +50,7 @@ _begin_fstest()
>  	_register_cleanup _cleanup
>  
>  	. ./common/rc
> +	init_rc
>  
>  	# remove previous $seqres.full before test
>  	rm -f $seqres.full $seqres.hints
> diff --git a/common/rc b/common/rc
> index d2de8588..f153ad81 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5754,8 +5754,6 @@ _require_program() {
>  	_have_program "$1" || _notrun "$tag required"
>  }
>  
> -init_rc
> -
>  ################################################################################
>  # make sure this script returns success
>  /bin/true
> diff --git a/soak b/soak
> index d5c4229a..5734d854 100755
> --- a/soak
> +++ b/soak
> @@ -5,6 +5,7 @@
>  
>  # get standard environment, filters and checks
>  . ./common/rc
> +# ToDo: Do we need an init_rc() here? How is soak used?

I have no idea what soak does and have never used it, but I think for
continuity's sake you should call init_rc here.

--D

>  . ./common/filter
>  
>  tmp=/tmp/$$
> -- 
> 2.34.1
> 
> 

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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
  2025-03-06 17:46   ` Darrick J. Wong
@ 2025-03-06 21:13   ` Zorro Lang
  2025-03-07  5:56     ` Nirjhar Roy (IBM)
  2025-03-06 21:30   ` Dave Chinner
  2 siblings, 1 reply; 17+ messages in thread
From: Zorro Lang @ 2025-03-06 21:13 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang, david

On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> Silently executing scripts during sourcing common/rc doesn't look good
> and also causes unnecessary script execution. Decouple init_rc() call
> and call init_rc() explicitly where required.
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---
>  check           | 10 ++--------
>  common/preamble |  1 +
>  common/rc       |  2 --
>  soak            |  1 +
>  4 files changed, 4 insertions(+), 10 deletions(-)
> 
> diff --git a/check b/check
> index ea92b0d6..d30af1ba 100755
> --- a/check
> +++ b/check
> @@ -840,16 +840,8 @@ function run_section()
>  		_prepare_test_list
>  	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
>  		_test_unmount 2> /dev/null
> -		if ! _test_mount
> -		then
> -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
> -			status=1
> -			exit
> -		fi

Why remove these lines?

>  	fi
>  
> -	init_rc

Doesn't the "check" need init_rc at here?

> -
>  	seq="check.$$"
>  	check="$RESULT_BASE/check"
>  
> @@ -870,6 +862,8 @@ function run_section()
>  	needwrap=true
>  
>  	if [ ! -z "$SCRATCH_DEV" ]; then
> +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
> +		[ $? -le 1 ] || exit 1
         ^^^^^^^
         Different indent with below code.

This looks like part of init_rc. If you don't remove above init_rc, can this
change be saved? 

>  	  _scratch_unmount 2> /dev/null
>  	  # call the overridden mkfs - make sure the FS is built
>  	  # the same as we'll create it later.
> diff --git a/common/preamble b/common/preamble
> index 0c9ee2e0..c92e55bb 100644
> --- a/common/preamble
> +++ b/common/preamble
> @@ -50,6 +50,7 @@ _begin_fstest()
>  	_register_cleanup _cleanup
>  
>  	. ./common/rc
> +	init_rc
>  
>  	# remove previous $seqres.full before test
>  	rm -f $seqres.full $seqres.hints
> diff --git a/common/rc b/common/rc
> index d2de8588..f153ad81 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5754,8 +5754,6 @@ _require_program() {
>  	_have_program "$1" || _notrun "$tag required"
>  }
>  
> -init_rc
> -
>  ################################################################################
>  # make sure this script returns success
>  /bin/true
> diff --git a/soak b/soak
> index d5c4229a..5734d854 100755
> --- a/soak
> +++ b/soak
> @@ -5,6 +5,7 @@
>  
>  # get standard environment, filters and checks
>  . ./common/rc
> +# ToDo: Do we need an init_rc() here? How is soak used?

I never noticed we have this file... this file was create by:

  commit 27fba05e66981c239c3be7a7e5a3aa0d8dc59247
  Author: Nathan Scott <nathans@sgi.com>
  Date:   Mon Jan 15 05:01:19 2001 +0000

      cmd/xfs/stress/001 1.6 Renamed to cmd/xfstests/001

I can't understand the relationship of this commit with this file. Does
anyone learn about the history of it.

I tried to "grep" the whole fstests, looks like nothing uses this file.
Maybe we should remove it?

Thanks,
Zorro

>  . ./common/filter
>  
>  tmp=/tmp/$$
> -- 
> 2.34.1
> 
> 


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
  2025-03-06 17:46   ` Darrick J. Wong
  2025-03-06 21:13   ` Zorro Lang
@ 2025-03-06 21:30   ` Dave Chinner
  2025-03-07  8:05     ` Nirjhar Roy (IBM)
  2 siblings, 1 reply; 17+ messages in thread
From: Dave Chinner @ 2025-03-06 21:30 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang

On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> Silently executing scripts during sourcing common/rc doesn't look good
> and also causes unnecessary script execution. Decouple init_rc() call
> and call init_rc() explicitly where required.
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>

FWIW, I've just done somethign similar for check-parallel. I need to
decouple common/config from common/rc and not run any code from
either common/config or common/rc.

I've included the patch below (it won't apply because there's all
sorts of refactoring for test list and config-section parsing in the
series before it), but it should give you an idea of how I think we
should be separating one-off initialisation environment varaibles,
common code inclusion and the repeated initialisation of section
specific parameters....

.....
> diff --git a/soak b/soak
> index d5c4229a..5734d854 100755
> --- a/soak
> +++ b/soak
> @@ -5,6 +5,7 @@
>  
>  # get standard environment, filters and checks
>  . ./common/rc
> +# ToDo: Do we need an init_rc() here? How is soak used?
>  . ./common/filter

I've also go a patch series that removes all these old 2000-era SGI
QE scripts that have not been used by anyone for the last 15
years. I did that to get rid of the technical debt that these
scripts have gathered over years of neglect. They aren't used, we
shouldn't even attempt to maintain them anymore.

-Dave.

-- 
Dave Chinner
david@fromorbit.com


fstests: separate sourcing common/rc and common/config from initialisation

From: Dave Chinner <dchinner@redhat.com>

The sourcing of common/rc causes code to be run. init_rc
is executed from common/rc, and it includes common/config which
also runs a couple of initialisation functions.

This is messy, because re-sourcing those files also does an awful
lot more setup work than running those a couple of init functions.

common/config only needs to be included once - everything that
scripts then depend on should be exported by it, and hence it should
only be included once from check/check-parallel to set up all the
environmental parameters for the entire run.

common/rc also only needs to be included once per context, but it
does not need to directly include common config nor does it need to
run init_rc in each individual test context.

Seperate out this mess. Include common/config directly where needed
and only use it to set up the environment. Move all the code that is
in common/config to common/rc so that common/config is not needed
for any purpose other than setting up the initial environment.
Move the initialisation functions to the scripts that include
common/config.

Config file and config section parsing can be run directly from check
and/or check-parallel; this is not needed for every context that
needs to know how what XFS_MKFS_PROG is set to...

Similarly, include common/rc only once, and only call init_rc or
_source_specific_fs() from the contexts that actually need that code
to be run.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 check             |  24 +++---
 common/config     | 218 --------------------------------------------------
 common/preamble   |   1 +
 common/rc         | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 tests/generic/367 |   7 +-
 tests/generic/749 |   3 +-
 6 files changed, 235 insertions(+), 252 deletions(-)

diff --git a/check b/check
index b4d31d138..b968a134a 100755
--- a/check
+++ b/check
@@ -43,10 +43,12 @@ timestamp=${TIMESTAMP:=false}
 
 rm -f $tmp.list $tmp.tmp $tmp.grep $here/$iam.out $tmp.report.* $tmp.arglist
 
-# We need to include the test list processing first as argument parsing
-# requires test list parsing and setup.
+. ./common/config
+. ./common/config-sections
+. ./common/rc
 . ./common/test_list
 
+
 usage()
 {
     echo "Usage: $0 [options] [testlist]"'
@@ -183,11 +185,15 @@ while [ $# -gt 0 ]; do
 	shift
 done
 
-# we need common/rc, that also sources common/config. We need to source it
-# after processing args, overlay needs FSTYP set before sourcing common/config
-if ! . ./common/rc; then
-	echo "check: failed to source common/rc"
-	exit 1
+# now we have done argument parsing, overlay has FSTYP set and we can now
+# start processing the config files and setting up devices.
+_config_section_setup
+_canonicalize_devices
+init_rc
+
+if [ ! -z "$REPORT_LIST" ]; then
+	. ./common/report
+	_assert_report_list
 fi
 
 # If the test config specified a soak test duration, see if there are any
@@ -601,10 +607,6 @@ function run_section()
 			status=1
 			exit
 		fi
-		# Previous FSTYP derived from TEST_DEV could be changed, source
-		# common/rc again with correct FSTYP to get FSTYP specific configs,
-		# e.g. common/xfs
-		. common/rc
 		_tl_prepare_test_list
 	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
 		_test_unmount 2> /dev/null
diff --git a/common/config b/common/config
index 571e52a58..03970bf54 100644
--- a/common/config
+++ b/common/config
@@ -40,7 +40,6 @@
 #
 
 . common/test_names
-. common/config-sections
 
 # all tests should use a common language setting to prevent golden
 # output mismatches.
@@ -348,220 +347,3 @@ if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
 	export SELINUX_MOUNT_OPTIONS
 fi
 
-_common_mount_opts()
-{
-	case $FSTYP in
-	9p)
-		echo $PLAN9_MOUNT_OPTIONS
-		;;
-	fuse)
-		echo $FUSE_MOUNT_OPTIONS
-		;;
-	xfs)
-		echo $XFS_MOUNT_OPTIONS
-		;;
-	udf)
-		echo $UDF_MOUNT_OPTIONS
-		;;
-	nfs)
-		echo $NFS_MOUNT_OPTIONS
-		;;
-	afs)
-		echo $AFS_MOUNT_OPTIONS
-		;;
-	cifs)
-		echo $CIFS_MOUNT_OPTIONS
-		;;
-	ceph)
-		echo $CEPHFS_MOUNT_OPTIONS
-		;;
-	glusterfs)
-		echo $GLUSTERFS_MOUNT_OPTIONS
-		;;
-	overlay)
-		echo $OVERLAY_MOUNT_OPTIONS
-		;;
-	ext2|ext3|ext4)
-		# acls & xattrs aren't turned on by default on ext$FOO
-		echo "-o acl,user_xattr $EXT_MOUNT_OPTIONS"
-		;;
-	f2fs)
-		echo "-o acl,user_xattr $F2FS_MOUNT_OPTIONS"
-		;;
-	reiserfs)
-		# acls & xattrs aren't turned on by default on reiserfs
-		echo "-o acl,user_xattr $REISERFS_MOUNT_OPTIONS"
-		;;
-       reiser4)
-		# acls & xattrs aren't supported by reiser4
-		echo $REISER4_MOUNT_OPTIONS
-		;;
-	gfs2)
-		# acls aren't turned on by default on gfs2
-		echo "-o acl $GFS2_MOUNT_OPTIONS"
-		;;
-	tmpfs)
-		# We need to specify the size at mount, use 1G by default
-		echo "-o size=1G $TMPFS_MOUNT_OPTIONS"
-		;;
-	ubifs)
-		echo $UBIFS_MOUNT_OPTIONS
-		;;
-	*)
-		;;
-	esac
-}
-
-_mount_opts()
-{
-	export MOUNT_OPTIONS=$(_common_mount_opts)
-}
-
-_test_mount_opts()
-{
-	export TEST_FS_MOUNT_OPTS=$(_common_mount_opts)
-}
-
-_mkfs_opts()
-{
-	case $FSTYP in
-	xfs)
-		export MKFS_OPTIONS=$XFS_MKFS_OPTIONS
-		;;
-	udf)
-		[ ! -z "$udf_fsize" ] && \
-			UDF_MKFS_OPTIONS="$UDF_MKFS_OPTIONS -s $udf_fsize"
-		export MKFS_OPTIONS=$UDF_MKFS_OPTIONS
-		;;
-	nfs)
-		export MKFS_OPTIONS=$NFS_MKFS_OPTIONS
-		;;
-	afs)
-		export MKFS_OPTIONS=$AFS_MKFS_OPTIONS
-		;;
-	cifs)
-		export MKFS_OPTIONS=$CIFS_MKFS_OPTIONS
-		;;
-	ceph)
-		export MKFS_OPTIONS=$CEPHFS_MKFS_OPTIONS
-		;;
-	reiserfs)
-		export MKFS_OPTIONS="$REISERFS_MKFS_OPTIONS -q"
-		;;
-       reiser4)
-		export MKFS_OPTIONS=$REISER4_MKFS_OPTIONS
-		;;
-	gfs2)
-		export MKFS_OPTIONS="$GFS2_MKFS_OPTIONS -O -p lock_nolock"
-		;;
-	jfs)
-		export MKFS_OPTIONS="$JFS_MKFS_OPTIONS -q"
-		;;
-	f2fs)
-		export MKFS_OPTIONS="$F2FS_MKFS_OPTIONS"
-		;;
-	btrfs)
-		export MKFS_OPTIONS="$BTRFS_MKFS_OPTIONS"
-		;;
-	bcachefs)
-		export MKFS_OPTIONS=$BCACHEFS_MKFS_OPTIONS
-		;;
-	*)
-		;;
-	esac
-}
-
-_fsck_opts()
-{
-	case $FSTYP in
-	ext2|ext3|ext4)
-		export FSCK_OPTIONS="-nf"
-		;;
-	reiser*)
-		export FSCK_OPTIONS="--yes"
-		;;
-	f2fs)
-		export FSCK_OPTIONS=""
-		;;
-	*)
-		export FSCK_OPTIONS="-n"
-		;;
-	esac
-}
-
-# check necessary running dependences then source sepcific fs helpers
-_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"
-		. ./common/ext4
-		;;
-	ext2|ext3)
-		. ./common/ext4
-		;;
-	f2fs)
-		[ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
-		;;
-	nfs)
-		. ./common/nfs
-		;;
-	afs)
-		;;
-	cifs)
-		;;
-	9p)
-		;;
-	fuse)
-		;;
-	ceph)
-		. ./common/ceph
-		;;
-	glusterfs)
-		;;
-	overlay)
-		. ./common/overlay
-		;;
-	reiser4)
-		[ "$MKFS_REISER4_PROG" = "" ] && _fatal "mkfs.reiser4 not found"
-		;;
-	pvfs2)
-		;;
-	ubifs)
-		[ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
-		. ./common/ubifs
-		;;
-	esac
-}
-
-_config_section_setup
-_canonicalize_devices
-# mkfs.xfs checks for TEST_DEV before permitting < 300M filesystems. TEST_DIR
-# and QA_CHECK_FS are also checked by mkfs.xfs, but already exported elsewhere.
-export TEST_DEV
-
-# make sure this script returns success
-/bin/true
diff --git a/common/preamble b/common/preamble
index 0c9ee2e03..1f40dd5d1 100644
--- a/common/preamble
+++ b/common/preamble
@@ -50,6 +50,7 @@ _begin_fstest()
 	_register_cleanup _cleanup
 
 	. ./common/rc
+	_source_specific_fs $FSTYP
 
 	# remove previous $seqres.full before test
 	rm -f $seqres.full $seqres.hints
diff --git a/common/rc b/common/rc
index 056112714..01f8cba2e 100644
--- a/common/rc
+++ b/common/rc
@@ -2,10 +2,11 @@
 # SPDX-License-Identifier: GPL-2.0+
 # Copyright (c) 2000-2006 Silicon Graphics, Inc.  All Rights Reserved.
 
-. common/config
-
 BC="$(type -P bc)" || BC=
 
+# make sure we have a standard umask
+umask 022
+
 # Don't use sync(1) directly if at all possible. In most cases we only need to
 # sync the fs under test, so we use syncfs if it is supported to prevent
 # disturbance of other tests that may be running concurrently.
@@ -250,17 +251,6 @@ _log_err()
     echo "(see $seqres.full for details)"
 }
 
-# make sure we have a standard umask
-umask 022
-
-# check for correct setup and source the $FSTYP specific functions now
-_source_specific_fs $FSTYP
-
-if [ ! -z "$REPORT_LIST" ]; then
-	. ./common/report
-	_assert_report_list
-fi
-
 _get_filesize()
 {
     stat -c %s "$1"
@@ -4895,6 +4885,8 @@ init_rc()
 		exit 1
 	fi
 
+	_source_specific_fs $FSTYP
+
 	# if $TEST_DEV is not mounted, mount it now as XFS
 	if [ -z "`_fs_type $TEST_DEV`" ]
 	then
@@ -4934,6 +4926,11 @@ init_rc()
 	# it is supported.
 	$XFS_IO_PROG -i -c quit 2>/dev/null && \
 		export XFS_IO_PROG="$XFS_IO_PROG -i"
+
+	# mkfs.xfs checks for TEST_DEV before permitting < 300M filesystems.
+	# TEST_DIR and QA_CHECK_FS are also checked by mkfs.xfs, but already
+	# exported elsewhere.
+	export TEST_DEV
 }
 
 # get real device path name by following link
@@ -5757,8 +5754,211 @@ _require_program() {
 	_have_program "$1" || _notrun "$tag required"
 }
 
-init_rc
+_common_mount_opts()
+{
+	case $FSTYP in
+	9p)
+		echo $PLAN9_MOUNT_OPTIONS
+		;;
+	fuse)
+		echo $FUSE_MOUNT_OPTIONS
+		;;
+	xfs)
+		echo $XFS_MOUNT_OPTIONS
+		;;
+	udf)
+		echo $UDF_MOUNT_OPTIONS
+		;;
+	nfs)
+		echo $NFS_MOUNT_OPTIONS
+		;;
+	afs)
+		echo $AFS_MOUNT_OPTIONS
+		;;
+	cifs)
+		echo $CIFS_MOUNT_OPTIONS
+		;;
+	ceph)
+		echo $CEPHFS_MOUNT_OPTIONS
+		;;
+	glusterfs)
+		echo $GLUSTERFS_MOUNT_OPTIONS
+		;;
+	overlay)
+		echo $OVERLAY_MOUNT_OPTIONS
+		;;
+	ext2|ext3|ext4)
+		# acls & xattrs aren't turned on by default on ext$FOO
+		echo "-o acl,user_xattr $EXT_MOUNT_OPTIONS"
+		;;
+	f2fs)
+		echo "-o acl,user_xattr $F2FS_MOUNT_OPTIONS"
+		;;
+	reiserfs)
+		# acls & xattrs aren't turned on by default on reiserfs
+		echo "-o acl,user_xattr $REISERFS_MOUNT_OPTIONS"
+		;;
+       reiser4)
+		# acls & xattrs aren't supported by reiser4
+		echo $REISER4_MOUNT_OPTIONS
+		;;
+	gfs2)
+		# acls aren't turned on by default on gfs2
+		echo "-o acl $GFS2_MOUNT_OPTIONS"
+		;;
+	tmpfs)
+		# We need to specify the size at mount, use 1G by default
+		echo "-o size=1G $TMPFS_MOUNT_OPTIONS"
+		;;
+	ubifs)
+		echo $UBIFS_MOUNT_OPTIONS
+		;;
+	*)
+		;;
+	esac
+}
 
-################################################################################
-# make sure this script returns success
-/bin/true
+_mount_opts()
+{
+	export MOUNT_OPTIONS=$(_common_mount_opts)
+}
+
+_test_mount_opts()
+{
+	export TEST_FS_MOUNT_OPTS=$(_common_mount_opts)
+}
+
+_mkfs_opts()
+{
+	case $FSTYP in
+	xfs)
+		export MKFS_OPTIONS=$XFS_MKFS_OPTIONS
+		;;
+	udf)
+		[ ! -z "$udf_fsize" ] && \
+			UDF_MKFS_OPTIONS="$UDF_MKFS_OPTIONS -s $udf_fsize"
+		export MKFS_OPTIONS=$UDF_MKFS_OPTIONS
+		;;
+	nfs)
+		export MKFS_OPTIONS=$NFS_MKFS_OPTIONS
+		;;
+	afs)
+		export MKFS_OPTIONS=$AFS_MKFS_OPTIONS
+		;;
+	cifs)
+		export MKFS_OPTIONS=$CIFS_MKFS_OPTIONS
+		;;
+	ceph)
+		export MKFS_OPTIONS=$CEPHFS_MKFS_OPTIONS
+		;;
+	reiserfs)
+		export MKFS_OPTIONS="$REISERFS_MKFS_OPTIONS -q"
+		;;
+       reiser4)
+		export MKFS_OPTIONS=$REISER4_MKFS_OPTIONS
+		;;
+	gfs2)
+		export MKFS_OPTIONS="$GFS2_MKFS_OPTIONS -O -p lock_nolock"
+		;;
+	jfs)
+		export MKFS_OPTIONS="$JFS_MKFS_OPTIONS -q"
+		;;
+	f2fs)
+		export MKFS_OPTIONS="$F2FS_MKFS_OPTIONS"
+		;;
+	btrfs)
+		export MKFS_OPTIONS="$BTRFS_MKFS_OPTIONS"
+		;;
+	bcachefs)
+		export MKFS_OPTIONS=$BCACHEFS_MKFS_OPTIONS
+		;;
+	*)
+		;;
+	esac
+}
+
+_fsck_opts()
+{
+	case $FSTYP in
+	ext2|ext3|ext4)
+		export FSCK_OPTIONS="-nf"
+		;;
+	reiser*)
+		export FSCK_OPTIONS="--yes"
+		;;
+	f2fs)
+		export FSCK_OPTIONS=""
+		;;
+	*)
+		export FSCK_OPTIONS="-n"
+		;;
+	esac
+}
+
+# check necessary running dependences then source sepcific fs helpers
+_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"
+		. ./common/ext4
+		;;
+	ext2|ext3)
+		. ./common/ext4
+		;;
+	f2fs)
+		[ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
+		;;
+	nfs)
+		. ./common/nfs
+		;;
+	afs)
+		;;
+	cifs)
+		;;
+	9p)
+		;;
+	fuse)
+		;;
+	ceph)
+		. ./common/ceph
+		;;
+	glusterfs)
+		;;
+	overlay)
+		. ./common/overlay
+		;;
+	reiser4)
+		[ "$MKFS_REISER4_PROG" = "" ] && _fatal "mkfs.reiser4 not found"
+		;;
+	pvfs2)
+		;;
+	ubifs)
+		[ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
+		. ./common/ubifs
+		;;
+	esac
+}
diff --git a/tests/generic/367 b/tests/generic/367
index ed371a02b..1c9c66730 100755
--- a/tests/generic/367
+++ b/tests/generic/367
@@ -10,13 +10,12 @@
 # i.e, with any file with allocated extents or delayed allocation. We also
 # check if the extsize value and the xflag bit actually got reflected after
 # setting/re-setting the extsize value.
-
-. ./common/config
-. ./common/filter
+#
 . ./common/preamble
-
 _begin_fstest ioctl quick
 
+. ./common/filter
+
 [ "$FSTYP" = "xfs" ] && _fixed_by_kernel_commit 2a492ff66673 \
 	"xfs: Check for delayed allocations before setting extsize"
 
diff --git a/tests/generic/749 b/tests/generic/749
index fc7477380..aac8da20d 100755
--- a/tests/generic/749
+++ b/tests/generic/749
@@ -14,11 +14,10 @@
 # page, you should get a SIGBUS. This test verifies we zero-fill to page
 # boundary and ensures we get a SIGBUS if we write to data beyond the system
 # page size even if the block size is greater than the system page size.
+#
 . ./common/preamble
-. ./common/rc
 _begin_fstest auto quick prealloc
 
-# Import common functions.
 . ./common/filter
 
 _require_scratch_nocheck

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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06 17:46   ` Darrick J. Wong
@ 2025-03-07  5:51     ` Nirjhar Roy (IBM)
  2025-03-07 17:40       ` Darrick J. Wong
  0 siblings, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-07  5:51 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david


On 3/6/25 23:16, Darrick J. Wong wrote:
> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>> Silently executing scripts during sourcing common/rc doesn't look good
>> and also causes unnecessary script execution. Decouple init_rc() call
>> and call init_rc() explicitly where required.
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> ---
>>   check           | 10 ++--------
>>   common/preamble |  1 +
>>   common/rc       |  2 --
>>   soak            |  1 +
>>   4 files changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/check b/check
>> index ea92b0d6..d30af1ba 100755
>> --- a/check
>> +++ b/check
>> @@ -840,16 +840,8 @@ function run_section()
>>   		_prepare_test_list
>>   	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
>>   		_test_unmount 2> /dev/null
>> -		if ! _test_mount
>> -		then
>> -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>> -			status=1
>> -			exit
>> -		fi
> Unrelated change?  I was expecting a mechanical ". ./common/rc" =>
> ". ./common/rc ; init_rc" change in this patch.
This patch adds an init_rc() call to _begin_fstests() in common/preamble 
and hence the above _test_mount() will be executed during that call. So 
this _test_mount isn't necessary here, right? _test_mount() will be 
executed (as a part of init_rc() call) before every test run. Please let 
me know if my understanding isn't correct.
>>   	fi
>>   
>> -	init_rc
> Why remove init_rc here?
Same reason as above.
>
>> -
>>   	seq="check.$$"
>>   	check="$RESULT_BASE/check"
>>   
>> @@ -870,6 +862,8 @@ function run_section()
>>   	needwrap=true
>>   
>>   	if [ ! -z "$SCRATCH_DEV" ]; then
>> +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
>> +		[ $? -le 1 ] || exit 1
>>   	  _scratch_unmount 2> /dev/null
>>   	  # call the overridden mkfs - make sure the FS is built
>>   	  # the same as we'll create it later.
>> diff --git a/common/preamble b/common/preamble
>> index 0c9ee2e0..c92e55bb 100644
>> --- a/common/preamble
>> +++ b/common/preamble
>> @@ -50,6 +50,7 @@ _begin_fstest()
>>   	_register_cleanup _cleanup
>>   
>>   	. ./common/rc
>> +	init_rc
>>   
>>   	# remove previous $seqres.full before test
>>   	rm -f $seqres.full $seqres.hints
>> diff --git a/common/rc b/common/rc
>> index d2de8588..f153ad81 100644
>> --- a/common/rc
>> +++ b/common/rc
>> @@ -5754,8 +5754,6 @@ _require_program() {
>>   	_have_program "$1" || _notrun "$tag required"
>>   }
>>   
>> -init_rc
>> -
>>   ################################################################################
>>   # make sure this script returns success
>>   /bin/true
>> diff --git a/soak b/soak
>> index d5c4229a..5734d854 100755
>> --- a/soak
>> +++ b/soak
>> @@ -5,6 +5,7 @@
>>   
>>   # get standard environment, filters and checks
>>   . ./common/rc
>> +# ToDo: Do we need an init_rc() here? How is soak used?
> I have no idea what soak does and have never used it, but I think for
> continuity's sake you should call init_rc here.

Okay. I think Dave has suggested removing this file[1]. This doesn't 
seem to used anymore.

[1] https://lore.kernel.org/all/Z8oT_tBYG-a79CjA@dread.disaster.area/

--NR

>
> --D
>
>>   . ./common/filter
>>   
>>   tmp=/tmp/$$
>> -- 
>> 2.34.1
>>
>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06 21:13   ` Zorro Lang
@ 2025-03-07  5:56     ` Nirjhar Roy (IBM)
  0 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-07  5:56 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang, david


On 3/7/25 02:43, Zorro Lang wrote:
> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>> Silently executing scripts during sourcing common/rc doesn't look good
>> and also causes unnecessary script execution. Decouple init_rc() call
>> and call init_rc() explicitly where required.
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> ---
>>   check           | 10 ++--------
>>   common/preamble |  1 +
>>   common/rc       |  2 --
>>   soak            |  1 +
>>   4 files changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/check b/check
>> index ea92b0d6..d30af1ba 100755
>> --- a/check
>> +++ b/check
>> @@ -840,16 +840,8 @@ function run_section()
>>   		_prepare_test_list
>>   	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
>>   		_test_unmount 2> /dev/null
>> -		if ! _test_mount
>> -		then
>> -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>> -			status=1
>> -			exit
>> -		fi
> Why remove these lines?

Darrick has asked the same question [1]. Basically I have already added 
init_rc() call to _begin_fstests() which will do the _test_mount() so we 
don't need the above lines, right?


[1] 
https://lore.kernel.org/all/716e0d26-7728-42bb-981d-aae89ef50d7f@gmail.com/

>
>>   	fi
>>   
>> -	init_rc
> Doesn't the "check" need init_rc at here?
Same reason as above.
>
>> -
>>   	seq="check.$$"
>>   	check="$RESULT_BASE/check"
>>   
>> @@ -870,6 +862,8 @@ function run_section()
>>   	needwrap=true
>>   
>>   	if [ ! -z "$SCRATCH_DEV" ]; then
>> +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
>> +		[ $? -le 1 ] || exit 1
>           ^^^^^^^
>           Different indent with below code.
>
> This looks like part of init_rc. If you don't remove above init_rc, can this
> change be saved?
>
>>   	  _scratch_unmount 2> /dev/null
>>   	  # call the overridden mkfs - make sure the FS is built
>>   	  # the same as we'll create it later.
>> diff --git a/common/preamble b/common/preamble
>> index 0c9ee2e0..c92e55bb 100644
>> --- a/common/preamble
>> +++ b/common/preamble
>> @@ -50,6 +50,7 @@ _begin_fstest()
>>   	_register_cleanup _cleanup
>>   
>>   	. ./common/rc
>> +	init_rc
>>   
>>   	# remove previous $seqres.full before test
>>   	rm -f $seqres.full $seqres.hints
>> diff --git a/common/rc b/common/rc
>> index d2de8588..f153ad81 100644
>> --- a/common/rc
>> +++ b/common/rc
>> @@ -5754,8 +5754,6 @@ _require_program() {
>>   	_have_program "$1" || _notrun "$tag required"
>>   }
>>   
>> -init_rc
>> -
>>   ################################################################################
>>   # make sure this script returns success
>>   /bin/true
>> diff --git a/soak b/soak
>> index d5c4229a..5734d854 100755
>> --- a/soak
>> +++ b/soak
>> @@ -5,6 +5,7 @@
>>   
>>   # get standard environment, filters and checks
>>   . ./common/rc
>> +# ToDo: Do we need an init_rc() here? How is soak used?
> I never noticed we have this file... this file was create by:
>
>    commit 27fba05e66981c239c3be7a7e5a3aa0d8dc59247
>    Author: Nathan Scott <nathans@sgi.com>
>    Date:   Mon Jan 15 05:01:19 2001 +0000
>
>        cmd/xfs/stress/001 1.6 Renamed to cmd/xfstests/001
>
> I can't understand the relationship of this commit with this file. Does
> anyone learn about the history of it.
>
> I tried to "grep" the whole fstests, looks like nothing uses this file.
> Maybe we should remove it?

Okay. I can see Dave suggesting something similar and has also given a 
sample patch where he is planning to do the same[2].

[2] https://lore.kernel.org/all/Z8oT_tBYG-a79CjA@dread.disaster.area/

--NR


>
> Thanks,
> Zorro
>
>>   . ./common/filter
>>   
>>   tmp=/tmp/$$
>> -- 
>> 2.34.1
>>
>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-06 21:30   ` Dave Chinner
@ 2025-03-07  8:05     ` Nirjhar Roy (IBM)
  2025-03-08  7:20       ` Zorro Lang
  0 siblings, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-07  8:05 UTC (permalink / raw)
  To: Dave Chinner
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang


On 3/7/25 03:00, Dave Chinner wrote:
> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>> Silently executing scripts during sourcing common/rc doesn't look good
>> and also causes unnecessary script execution. Decouple init_rc() call
>> and call init_rc() explicitly where required.
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> FWIW, I've just done somethign similar for check-parallel. I need to
> decouple common/config from common/rc and not run any code from
> either common/config or common/rc.
>
> I've included the patch below (it won't apply because there's all
> sorts of refactoring for test list and config-section parsing in the
> series before it), but it should give you an idea of how I think we
> should be separating one-off initialisation environment varaibles,
> common code inclusion and the repeated initialisation of section
> specific parameters....
Thank you so much. I can a look at this.
>
> .....
>> diff --git a/soak b/soak
>> index d5c4229a..5734d854 100755
>> --- a/soak
>> +++ b/soak
>> @@ -5,6 +5,7 @@
>>   
>>   # get standard environment, filters and checks
>>   . ./common/rc
>> +# ToDo: Do we need an init_rc() here? How is soak used?
>>   . ./common/filter
> I've also go a patch series that removes all these old 2000-era SGI
> QE scripts that have not been used by anyone for the last 15
> years. I did that to get rid of the technical debt that these
> scripts have gathered over years of neglect. They aren't used, we
> shouldn't even attempt to maintain them anymore.

Okay. What do you mean by SGI QE script (sorry, not familiar with this)? 
Do you mean some kind of CI/automation-test script?

--NR

>
> -Dave.
>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-07  5:51     ` Nirjhar Roy (IBM)
@ 2025-03-07 17:40       ` Darrick J. Wong
  2025-03-12  5:46         ` Nirjhar Roy (IBM)
  0 siblings, 1 reply; 17+ messages in thread
From: Darrick J. Wong @ 2025-03-07 17:40 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david

On Fri, Mar 07, 2025 at 11:21:15AM +0530, Nirjhar Roy (IBM) wrote:
> 
> On 3/6/25 23:16, Darrick J. Wong wrote:
> > On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> > > Silently executing scripts during sourcing common/rc doesn't look good
> > > and also causes unnecessary script execution. Decouple init_rc() call
> > > and call init_rc() explicitly where required.
> > > 
> > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> > > ---
> > >   check           | 10 ++--------
> > >   common/preamble |  1 +
> > >   common/rc       |  2 --
> > >   soak            |  1 +
> > >   4 files changed, 4 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/check b/check
> > > index ea92b0d6..d30af1ba 100755
> > > --- a/check
> > > +++ b/check
> > > @@ -840,16 +840,8 @@ function run_section()
> > >   		_prepare_test_list
> > >   	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
> > >   		_test_unmount 2> /dev/null
> > > -		if ! _test_mount
> > > -		then
> > > -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
> > > -			status=1
> > > -			exit
> > > -		fi
> > Unrelated change?  I was expecting a mechanical ". ./common/rc" =>
> > ". ./common/rc ; init_rc" change in this patch.
> This patch adds an init_rc() call to _begin_fstests() in common/preamble and
> hence the above _test_mount() will be executed during that call. So this
> _test_mount isn't necessary here, right? _test_mount() will be executed (as
> a part of init_rc() call) before every test run. Please let me know if my
> understanding isn't correct.

It's true that in terms of getting the test filesystem mounted, the
_test_mount here and in init_rc are redundant.  But look at what happens
on error here -- we print "check: failed to mount..." to signal that the
new section's TEST_FS_MOUNT_OPTS are not valid, and exit the ./check
process.

By deferring the mount to the init_rc in _preamble, that means that
we'll run the whole section with bad mount options, most likely
resulting in every test spewing "common/rc: could not mount..." and
appearing to fail.

I think.  I'm not sure what "status=1; exit" does as compared to
"exit 1"; AFAICT the former actually results in an exit code of 0
because the (otherwise pointless) assignment succeeds.

Granted, the init_rc that you remove below would also catch that case
and exit ./check

> > >   	fi
> > > -	init_rc
> > Why remove init_rc here?
> Same reason as above.

But that's an additional change in behavior.  If there's no reason for
calling init_rc() from run_section() then that should be a separate
patch with a separate justification.

--D

> > 
> > > -
> > >   	seq="check.$$"
> > >   	check="$RESULT_BASE/check"
> > > @@ -870,6 +862,8 @@ function run_section()
> > >   	needwrap=true
> > >   	if [ ! -z "$SCRATCH_DEV" ]; then
> > > +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
> > > +		[ $? -le 1 ] || exit 1
> > >   	  _scratch_unmount 2> /dev/null
> > >   	  # call the overridden mkfs - make sure the FS is built
> > >   	  # the same as we'll create it later.
> > > diff --git a/common/preamble b/common/preamble
> > > index 0c9ee2e0..c92e55bb 100644
> > > --- a/common/preamble
> > > +++ b/common/preamble
> > > @@ -50,6 +50,7 @@ _begin_fstest()
> > >   	_register_cleanup _cleanup
> > >   	. ./common/rc
> > > +	init_rc
> > >   	# remove previous $seqres.full before test
> > >   	rm -f $seqres.full $seqres.hints
> > > diff --git a/common/rc b/common/rc
> > > index d2de8588..f153ad81 100644
> > > --- a/common/rc
> > > +++ b/common/rc
> > > @@ -5754,8 +5754,6 @@ _require_program() {
> > >   	_have_program "$1" || _notrun "$tag required"
> > >   }
> > > -init_rc
> > > -
> > >   ################################################################################
> > >   # make sure this script returns success
> > >   /bin/true
> > > diff --git a/soak b/soak
> > > index d5c4229a..5734d854 100755
> > > --- a/soak
> > > +++ b/soak
> > > @@ -5,6 +5,7 @@
> > >   # get standard environment, filters and checks
> > >   . ./common/rc
> > > +# ToDo: Do we need an init_rc() here? How is soak used?
> > I have no idea what soak does and have never used it, but I think for
> > continuity's sake you should call init_rc here.
> 
> Okay. I think Dave has suggested removing this file[1]. This doesn't seem to
> used anymore.
> 
> [1] https://lore.kernel.org/all/Z8oT_tBYG-a79CjA@dread.disaster.area/
> 
> --NR
> 
> > 
> > --D
> > 
> > >   . ./common/filter
> > >   tmp=/tmp/$$
> > > -- 
> > > 2.34.1
> > > 
> > > 
> -- 
> Nirjhar Roy
> Linux Kernel Developer
> IBM, Bangalore
> 
> 

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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-07  8:05     ` Nirjhar Roy (IBM)
@ 2025-03-08  7:20       ` Zorro Lang
  2025-03-10  8:06         ` Zorro Lang
  2025-03-12  4:41         ` Nirjhar Roy (IBM)
  0 siblings, 2 replies; 17+ messages in thread
From: Zorro Lang @ 2025-03-08  7:20 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: Dave Chinner, fstests, linux-ext4, linux-xfs, ritesh.list,
	ojaswin, djwong, zlang

On Fri, Mar 07, 2025 at 01:35:02PM +0530, Nirjhar Roy (IBM) wrote:
> 
> On 3/7/25 03:00, Dave Chinner wrote:
> > On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> > > Silently executing scripts during sourcing common/rc doesn't look good
> > > and also causes unnecessary script execution. Decouple init_rc() call
> > > and call init_rc() explicitly where required.
> > > 
> > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> > FWIW, I've just done somethign similar for check-parallel. I need to
> > decouple common/config from common/rc and not run any code from
> > either common/config or common/rc.
> > 
> > I've included the patch below (it won't apply because there's all
> > sorts of refactoring for test list and config-section parsing in the
> > series before it), but it should give you an idea of how I think we
> > should be separating one-off initialisation environment varaibles,
> > common code inclusion and the repeated initialisation of section
> > specific parameters....
> Thank you so much. I can a look at this.
> > 
> > .....
> > > diff --git a/soak b/soak
> > > index d5c4229a..5734d854 100755
> > > --- a/soak
> > > +++ b/soak
> > > @@ -5,6 +5,7 @@
> > >   # get standard environment, filters and checks
> > >   . ./common/rc
> > > +# ToDo: Do we need an init_rc() here? How is soak used?
> > >   . ./common/filter
> > I've also go a patch series that removes all these old 2000-era SGI
> > QE scripts that have not been used by anyone for the last 15
> > years. I did that to get rid of the technical debt that these
> > scripts have gathered over years of neglect. They aren't used, we
> > shouldn't even attempt to maintain them anymore.
> 
> Okay. What do you mean by SGI QE script (sorry, not familiar with this)? Do
> you mean some kind of CI/automation-test script?

SGI is Silicon Graphics International Corp. :
https://en.wikipedia.org/wiki/Silicon_Graphics_International

xfstests was created to test xfs on IRIX (https://en.wikipedia.org/wiki/IRIX)
of SGI. Dave Chinner worked in SGI company long time ago, so he's the expert
of all these things, and knows lots of past details :)

Thanks,
Zorro

> 
> --NR
> 
> > 
> > -Dave.
> > 
> -- 
> Nirjhar Roy
> Linux Kernel Developer
> IBM, Bangalore
> 
> 


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-08  7:20       ` Zorro Lang
@ 2025-03-10  8:06         ` Zorro Lang
  2025-03-12  4:41           ` Nirjhar Roy (IBM)
  2025-03-12  4:41         ` Nirjhar Roy (IBM)
  1 sibling, 1 reply; 17+ messages in thread
From: Zorro Lang @ 2025-03-10  8:06 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: Dave Chinner, fstests, linux-ext4, linux-xfs, ritesh.list,
	ojaswin, djwong, zlang

On Sat, Mar 08, 2025 at 03:20:34PM +0800, Zorro Lang wrote:
> On Fri, Mar 07, 2025 at 01:35:02PM +0530, Nirjhar Roy (IBM) wrote:
> > 
> > On 3/7/25 03:00, Dave Chinner wrote:
> > > On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
> > > > Silently executing scripts during sourcing common/rc doesn't look good
> > > > and also causes unnecessary script execution. Decouple init_rc() call
> > > > and call init_rc() explicitly where required.
> > > > 
> > > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> > > FWIW, I've just done somethign similar for check-parallel. I need to
> > > decouple common/config from common/rc and not run any code from
> > > either common/config or common/rc.
> > > 
> > > I've included the patch below (it won't apply because there's all
> > > sorts of refactoring for test list and config-section parsing in the
> > > series before it), but it should give you an idea of how I think we
> > > should be separating one-off initialisation environment varaibles,
> > > common code inclusion and the repeated initialisation of section
> > > specific parameters....
> > Thank you so much. I can a look at this.
> > > 
> > > .....
> > > > diff --git a/soak b/soak
> > > > index d5c4229a..5734d854 100755
> > > > --- a/soak
> > > > +++ b/soak
> > > > @@ -5,6 +5,7 @@
> > > >   # get standard environment, filters and checks
> > > >   . ./common/rc
> > > > +# ToDo: Do we need an init_rc() here? How is soak used?
> > > >   . ./common/filter
> > > I've also go a patch series that removes all these old 2000-era SGI
> > > QE scripts that have not been used by anyone for the last 15
> > > years. I did that to get rid of the technical debt that these
> > > scripts have gathered over years of neglect. They aren't used, we
> > > shouldn't even attempt to maintain them anymore.
> > 
> > Okay. What do you mean by SGI QE script (sorry, not familiar with this)? Do
> > you mean some kind of CI/automation-test script?
> 
> SGI is Silicon Graphics International Corp. :
> https://en.wikipedia.org/wiki/Silicon_Graphics_International
> 
> xfstests was created to test xfs on IRIX (https://en.wikipedia.org/wiki/IRIX)
> of SGI. Dave Chinner worked in SGI company long time ago, so he's the expert
> of all these things, and knows lots of past details :)

Hi Nirjhar,

I've merged Dave's "[PATCH 0/5] fstests: remove old SGI QE scripts" into
patches-in-queue branch. You can base on that to write your V2, to avoid
dealing with the "soak" file.

Thanks,
Zorro

> 
> Thanks,
> Zorro
> 
> > 
> > --NR
> > 
> > > 
> > > -Dave.
> > > 
> > -- 
> > Nirjhar Roy
> > Linux Kernel Developer
> > IBM, Bangalore
> > 
> > 


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-10  8:06         ` Zorro Lang
@ 2025-03-12  4:41           ` Nirjhar Roy (IBM)
  0 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-12  4:41 UTC (permalink / raw)
  To: Zorro Lang
  Cc: Dave Chinner, fstests, linux-ext4, linux-xfs, ritesh.list,
	ojaswin, djwong, zlang


On 3/10/25 13:36, Zorro Lang wrote:
> On Sat, Mar 08, 2025 at 03:20:34PM +0800, Zorro Lang wrote:
>> On Fri, Mar 07, 2025 at 01:35:02PM +0530, Nirjhar Roy (IBM) wrote:
>>> On 3/7/25 03:00, Dave Chinner wrote:
>>>> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>>>>> Silently executing scripts during sourcing common/rc doesn't look good
>>>>> and also causes unnecessary script execution. Decouple init_rc() call
>>>>> and call init_rc() explicitly where required.
>>>>>
>>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>> FWIW, I've just done somethign similar for check-parallel. I need to
>>>> decouple common/config from common/rc and not run any code from
>>>> either common/config or common/rc.
>>>>
>>>> I've included the patch below (it won't apply because there's all
>>>> sorts of refactoring for test list and config-section parsing in the
>>>> series before it), but it should give you an idea of how I think we
>>>> should be separating one-off initialisation environment varaibles,
>>>> common code inclusion and the repeated initialisation of section
>>>> specific parameters....
>>> Thank you so much. I can a look at this.
>>>> .....
>>>>> diff --git a/soak b/soak
>>>>> index d5c4229a..5734d854 100755
>>>>> --- a/soak
>>>>> +++ b/soak
>>>>> @@ -5,6 +5,7 @@
>>>>>    # get standard environment, filters and checks
>>>>>    . ./common/rc
>>>>> +# ToDo: Do we need an init_rc() here? How is soak used?
>>>>>    . ./common/filter
>>>> I've also go a patch series that removes all these old 2000-era SGI
>>>> QE scripts that have not been used by anyone for the last 15
>>>> years. I did that to get rid of the technical debt that these
>>>> scripts have gathered over years of neglect. They aren't used, we
>>>> shouldn't even attempt to maintain them anymore.
>>> Okay. What do you mean by SGI QE script (sorry, not familiar with this)? Do
>>> you mean some kind of CI/automation-test script?
>> SGI is Silicon Graphics International Corp. :
>> https://en.wikipedia.org/wiki/Silicon_Graphics_International
>>
>> xfstests was created to test xfs on IRIX (https://en.wikipedia.org/wiki/IRIX)
>> of SGI. Dave Chinner worked in SGI company long time ago, so he's the expert
>> of all these things, and knows lots of past details :)
> Hi Nirjhar,
>
> I've merged Dave's "[PATCH 0/5] fstests: remove old SGI QE scripts" into
> patches-in-queue branch. You can base on that to write your V2, to avoid
> dealing with the "soak" file.
>
> Thanks,
> Zorro

Okay, thank you for the pointer. I will send the v2 after rebasing.

--NR

>
>> Thanks,
>> Zorro
>>
>>> --NR
>>>
>>>> -Dave.
>>>>
>>> -- 
>>> Nirjhar Roy
>>> Linux Kernel Developer
>>> IBM, Bangalore
>>>
>>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-08  7:20       ` Zorro Lang
  2025-03-10  8:06         ` Zorro Lang
@ 2025-03-12  4:41         ` Nirjhar Roy (IBM)
  1 sibling, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-12  4:41 UTC (permalink / raw)
  To: Zorro Lang
  Cc: Dave Chinner, fstests, linux-ext4, linux-xfs, ritesh.list,
	ojaswin, djwong, zlang


On 3/8/25 12:50, Zorro Lang wrote:
> On Fri, Mar 07, 2025 at 01:35:02PM +0530, Nirjhar Roy (IBM) wrote:
>> On 3/7/25 03:00, Dave Chinner wrote:
>>> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>>>> Silently executing scripts during sourcing common/rc doesn't look good
>>>> and also causes unnecessary script execution. Decouple init_rc() call
>>>> and call init_rc() explicitly where required.
>>>>
>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>> FWIW, I've just done somethign similar for check-parallel. I need to
>>> decouple common/config from common/rc and not run any code from
>>> either common/config or common/rc.
>>>
>>> I've included the patch below (it won't apply because there's all
>>> sorts of refactoring for test list and config-section parsing in the
>>> series before it), but it should give you an idea of how I think we
>>> should be separating one-off initialisation environment varaibles,
>>> common code inclusion and the repeated initialisation of section
>>> specific parameters....
>> Thank you so much. I can a look at this.
>>> .....
>>>> diff --git a/soak b/soak
>>>> index d5c4229a..5734d854 100755
>>>> --- a/soak
>>>> +++ b/soak
>>>> @@ -5,6 +5,7 @@
>>>>    # get standard environment, filters and checks
>>>>    . ./common/rc
>>>> +# ToDo: Do we need an init_rc() here? How is soak used?
>>>>    . ./common/filter
>>> I've also go a patch series that removes all these old 2000-era SGI
>>> QE scripts that have not been used by anyone for the last 15
>>> years. I did that to get rid of the technical debt that these
>>> scripts have gathered over years of neglect. They aren't used, we
>>> shouldn't even attempt to maintain them anymore.
>> Okay. What do you mean by SGI QE script (sorry, not familiar with this)? Do
>> you mean some kind of CI/automation-test script?
> SGI is Silicon Graphics International Corp. :
> https://en.wikipedia.org/wiki/Silicon_Graphics_International
>
> xfstests was created to test xfs on IRIX (https://en.wikipedia.org/wiki/IRIX)
> of SGI. Dave Chinner worked in SGI company long time ago, so he's the expert
> of all these things, and knows lots of past details :)
>
> Thanks,
> Zorro

Okay, got it. Thank you.

--NR

>
>> --NR
>>
>>> -Dave.
>>>
>> -- 
>> Nirjhar Roy
>> Linux Kernel Developer
>> IBM, Bangalore
>>
>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-07 17:40       ` Darrick J. Wong
@ 2025-03-12  5:46         ` Nirjhar Roy (IBM)
  2025-03-18  4:57           ` Nirjhar Roy (IBM)
  0 siblings, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-12  5:46 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david


On 3/7/25 23:10, Darrick J. Wong wrote:
> On Fri, Mar 07, 2025 at 11:21:15AM +0530, Nirjhar Roy (IBM) wrote:
>> On 3/6/25 23:16, Darrick J. Wong wrote:
>>> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>>>> Silently executing scripts during sourcing common/rc doesn't look good
>>>> and also causes unnecessary script execution. Decouple init_rc() call
>>>> and call init_rc() explicitly where required.
>>>>
>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>> ---
>>>>    check           | 10 ++--------
>>>>    common/preamble |  1 +
>>>>    common/rc       |  2 --
>>>>    soak            |  1 +
>>>>    4 files changed, 4 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/check b/check
>>>> index ea92b0d6..d30af1ba 100755
>>>> --- a/check
>>>> +++ b/check
>>>> @@ -840,16 +840,8 @@ function run_section()
>>>>    		_prepare_test_list
>>>>    	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
>>>>    		_test_unmount 2> /dev/null
>>>> -		if ! _test_mount
>>>> -		then
>>>> -			echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>>> -			status=1
>>>> -			exit
>>>> -		fi
>>> Unrelated change?  I was expecting a mechanical ". ./common/rc" =>
>>> ". ./common/rc ; init_rc" change in this patch.
>> This patch adds an init_rc() call to _begin_fstests() in common/preamble and
>> hence the above _test_mount() will be executed during that call. So this
>> _test_mount isn't necessary here, right? _test_mount() will be executed (as
>> a part of init_rc() call) before every test run. Please let me know if my
>> understanding isn't correct.
> It's true that in terms of getting the test filesystem mounted, the
> _test_mount here and in init_rc are redundant.  But look at what happens
> on error here -- we print "check: failed to mount..." to signal that the
> new section's TEST_FS_MOUNT_OPTS are not valid, and exit the ./check
> process.
>
> By deferring the mount to the init_rc in _preamble, that means that
> we'll run the whole section with bad mount options, most likely
> resulting in every test spewing "common/rc: could not mount..." and
> appearing to fail.
Aah, right. The exit should be at the check level if some parameter is 
not correct in a section. I will make the change in v2.
>
> I think.  I'm not sure what "status=1; exit" does as compared to
> "exit 1"; AFAICT the former actually results in an exit code of 0
> because the (otherwise pointless) assignment succeeds.

I think "status=0; exit" has a reason. If we see the following trap 
handler registration in the check script:

if $OPTIONS_HAVE_SECTIONS; then
     trap "_kill_seq; _summary; exit \$status" 0 1 2 3 15
else
     trap "_kill_seq; _wrapup; exit \$status" 0 1 2 3 15
fi

So, "exit 1" will exit the check script without setting the correct 
return value. I ran with the following local.config file:

[xfs_4k_valid]
FSTYP=xfs
TEST_DEV=/dev/loop0
TEST_DIR=/mnt1/test
SCRATCH_DEV=/dev/loop1
SCRATCH_MNT=/mnt1/scratch

[xfs_4k_invalid]
FSTYP=xfs
TEST_DEV=/dev/loop0
TEST_DIR=/mnt1/invalid_dir
SCRATCH_DEV=/dev/loop1
SCRATCH_MNT=/mnt1/scratch

This caused the init_rc() to catch the case of invalid _test_mount 
options. Although the check script correctly failed during the execution 
of the "xfs_4k_invalid" section, the return value was 0, i.e "echo $?" 
returned 0. This is because init_rc exits with "exit 1" without 
correctly setting the value of "status".

However, when I executed with the following local.config file:

[xfs_4k_valid]
FSTYP=xfs
TEST_DEV=/dev/loop0
TEST_DIR=/mnt1/test
SCRATCH_DEV=/dev/loop1
SCRATCH_MNT=/mnt1/scratch

[xfs_4k_invalid]
FSTYP=xfs
TEST_DEV=/dev/loop0
TEST_DIR=/mnt1/invalid_dir
SCRATCH_DEV=/dev/loop1
SCRATCH_MNT=/mnt1/scratch
TEST_FS_MOUNT_OPTS="-o invalidss"

This caused the "elif [ "$OLD_TEST_FS_MOUNT_OPTS" != 
"$TEST_FS_MOUNT_OPTS" ]; then" to be executed. Now, when I checked the 
value of "echo $?", it showed 1. IMO, this is the correct behavior, and 
we should always use "status=<value>; exit" and NOT "exit 1" directly. 
Even if 1 section fails,   "./check <test-list>" command should return a 
non-zero value. Can you please let me know if my understanding is 
correct? If yes, maybe we can have a function like

_set_status_and_exit()
{

     status="$1"
     exit
}

and replace all the "status <value>; exit" and "exit <value>" with 
"_set_status_and_exit <value>"

--NR


>
> Granted, the init_rc that you remove below would also catch that case
> and exit ./check
Yes. init_rc can catch that case with an additional difference that it 
will attempt another mount "retrying test device mount with external set"
>
>>>>    	fi
>>>> -	init_rc
>>> Why remove init_rc here?
>> Same reason as above.
> But that's an additional change in behavior.  If there's no reason for
> calling init_rc() from run_section() then that should be a separate
> patch with a separate justification.

Since the check for _test_mount should be at the check script level and 
not at the _begin_fstest(), maybe we should

1. Keep the init_rc call here

2. Remove the _test_mount above (the one with "elif [ 
"$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then" ) and have a 
separate patch for it with proper justification.

3. NOT have any init_rc call in _begin_fstest(), since the _test_mount 
related checks would already been done by the time _begin_fstests() gets 
executed.

The above changes will also not change any existing behavior. Can you 
please let me know your thoughts and I can send a V2 accordingly?

--NR

>
> --D
>
>>>> -
>>>>    	seq="check.$$"
>>>>    	check="$RESULT_BASE/check"
>>>> @@ -870,6 +862,8 @@ function run_section()
>>>>    	needwrap=true
>>>>    	if [ ! -z "$SCRATCH_DEV" ]; then
>>>> +		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
>>>> +		[ $? -le 1 ] || exit 1
>>>>    	  _scratch_unmount 2> /dev/null
>>>>    	  # call the overridden mkfs - make sure the FS is built
>>>>    	  # the same as we'll create it later.
>>>> diff --git a/common/preamble b/common/preamble
>>>> index 0c9ee2e0..c92e55bb 100644
>>>> --- a/common/preamble
>>>> +++ b/common/preamble
>>>> @@ -50,6 +50,7 @@ _begin_fstest()
>>>>    	_register_cleanup _cleanup
>>>>    	. ./common/rc
>>>> +	init_rc
>>>>    	# remove previous $seqres.full before test
>>>>    	rm -f $seqres.full $seqres.hints
>>>> diff --git a/common/rc b/common/rc
>>>> index d2de8588..f153ad81 100644
>>>> --- a/common/rc
>>>> +++ b/common/rc
>>>> @@ -5754,8 +5754,6 @@ _require_program() {
>>>>    	_have_program "$1" || _notrun "$tag required"
>>>>    }
>>>> -init_rc
>>>> -
>>>>    ################################################################################
>>>>    # make sure this script returns success
>>>>    /bin/true
>>>> diff --git a/soak b/soak
>>>> index d5c4229a..5734d854 100755
>>>> --- a/soak
>>>> +++ b/soak
>>>> @@ -5,6 +5,7 @@
>>>>    # get standard environment, filters and checks
>>>>    . ./common/rc
>>>> +# ToDo: Do we need an init_rc() here? How is soak used?
>>> I have no idea what soak does and have never used it, but I think for
>>> continuity's sake you should call init_rc here.
>> Okay. I think Dave has suggested removing this file[1]. This doesn't seem to
>> used anymore.
>>
>> [1] https://lore.kernel.org/all/Z8oT_tBYG-a79CjA@dread.disaster.area/
>>
>> --NR
>>
>>> --D
>>>
>>>>    . ./common/filter
>>>>    tmp=/tmp/$$
>>>> -- 
>>>> 2.34.1
>>>>
>>>>
>> -- 
>> Nirjhar Roy
>> Linux Kernel Developer
>> IBM, Bangalore
>>
>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc
  2025-03-12  5:46         ` Nirjhar Roy (IBM)
@ 2025-03-18  4:57           ` Nirjhar Roy (IBM)
  0 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-03-18  4:57 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, zlang,
	david


On 3/12/25 11:16, Nirjhar Roy (IBM) wrote:
>
> On 3/7/25 23:10, Darrick J. Wong wrote:
>> On Fri, Mar 07, 2025 at 11:21:15AM +0530, Nirjhar Roy (IBM) wrote:
>>> On 3/6/25 23:16, Darrick J. Wong wrote:
>>>> On Thu, Mar 06, 2025 at 08:17:41AM +0000, Nirjhar Roy (IBM) wrote:
>>>>> Silently executing scripts during sourcing common/rc doesn't look 
>>>>> good
>>>>> and also causes unnecessary script execution. Decouple init_rc() call
>>>>> and call init_rc() explicitly where required.
>>>>>
>>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>>> ---
>>>>>    check           | 10 ++--------
>>>>>    common/preamble |  1 +
>>>>>    common/rc       |  2 --
>>>>>    soak            |  1 +
>>>>>    4 files changed, 4 insertions(+), 10 deletions(-)
>>>>>
>>>>> diff --git a/check b/check
>>>>> index ea92b0d6..d30af1ba 100755
>>>>> --- a/check
>>>>> +++ b/check
>>>>> @@ -840,16 +840,8 @@ function run_section()
>>>>>            _prepare_test_list
>>>>>        elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" 
>>>>> ]; then
>>>>>            _test_unmount 2> /dev/null
>>>>> -        if ! _test_mount
>>>>> -        then
>>>>> -            echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>>>> -            status=1
>>>>> -            exit
>>>>> -        fi
>>>> Unrelated change?  I was expecting a mechanical ". ./common/rc" =>
>>>> ". ./common/rc ; init_rc" change in this patch.
>>> This patch adds an init_rc() call to _begin_fstests() in 
>>> common/preamble and
>>> hence the above _test_mount() will be executed during that call. So 
>>> this
>>> _test_mount isn't necessary here, right? _test_mount() will be 
>>> executed (as
>>> a part of init_rc() call) before every test run. Please let me know 
>>> if my
>>> understanding isn't correct.
>> It's true that in terms of getting the test filesystem mounted, the
>> _test_mount here and in init_rc are redundant.  But look at what happens
>> on error here -- we print "check: failed to mount..." to signal that the
>> new section's TEST_FS_MOUNT_OPTS are not valid, and exit the ./check
>> process.
>>
>> By deferring the mount to the init_rc in _preamble, that means that
>> we'll run the whole section with bad mount options, most likely
>> resulting in every test spewing "common/rc: could not mount..." and
>> appearing to fail.
> Aah, right. The exit should be at the check level if some parameter is 
> not correct in a section. I will make the change in v2.
>>
>> I think.  I'm not sure what "status=1; exit" does as compared to
>> "exit 1"; AFAICT the former actually results in an exit code of 0
>> because the (otherwise pointless) assignment succeeds.
>
> I think "status=0; exit" has a reason. If we see the following trap 
> handler registration in the check script:
>
> if $OPTIONS_HAVE_SECTIONS; then
>     trap "_kill_seq; _summary; exit \$status" 0 1 2 3 15
> else
>     trap "_kill_seq; _wrapup; exit \$status" 0 1 2 3 15
> fi
>
> So, "exit 1" will exit the check script without setting the correct 
> return value. I ran with the following local.config file:
>
> [xfs_4k_valid]
> FSTYP=xfs
> TEST_DEV=/dev/loop0
> TEST_DIR=/mnt1/test
> SCRATCH_DEV=/dev/loop1
> SCRATCH_MNT=/mnt1/scratch
>
> [xfs_4k_invalid]
> FSTYP=xfs
> TEST_DEV=/dev/loop0
> TEST_DIR=/mnt1/invalid_dir
> SCRATCH_DEV=/dev/loop1
> SCRATCH_MNT=/mnt1/scratch
>
> This caused the init_rc() to catch the case of invalid _test_mount 
> options. Although the check script correctly failed during the 
> execution of the "xfs_4k_invalid" section, the return value was 0, i.e 
> "echo $?" returned 0. This is because init_rc exits with "exit 1" 
> without correctly setting the value of "status".
>
> However, when I executed with the following local.config file:
>
> [xfs_4k_valid]
> FSTYP=xfs
> TEST_DEV=/dev/loop0
> TEST_DIR=/mnt1/test
> SCRATCH_DEV=/dev/loop1
> SCRATCH_MNT=/mnt1/scratch
>
> [xfs_4k_invalid]
> FSTYP=xfs
> TEST_DEV=/dev/loop0
> TEST_DIR=/mnt1/invalid_dir
> SCRATCH_DEV=/dev/loop1
> SCRATCH_MNT=/mnt1/scratch
> TEST_FS_MOUNT_OPTS="-o invalidss"
>
> This caused the "elif [ "$OLD_TEST_FS_MOUNT_OPTS" != 
> "$TEST_FS_MOUNT_OPTS" ]; then" to be executed. Now, when I checked the 
> value of "echo $?", it showed 1. IMO, this is the correct behavior, 
> and we should always use "status=<value>; exit" and NOT "exit 1" 
> directly. Even if 1 section fails,   "./check <test-list>" command 
> should return a non-zero value. Can you please let me know if my 
> understanding is correct? If yes, maybe we can have a function like
>
> _set_status_and_exit()
> {
>
>     status="$1"
>     exit
> }
>
> and replace all the "status <value>; exit" and "exit <value>" with 
> "_set_status_and_exit <value>"

Hi Darrick, any feedback on the above?

--NR

>
> --NR
>
>
>>
>> Granted, the init_rc that you remove below would also catch that case
>> and exit ./check
> Yes. init_rc can catch that case with an additional difference that it 
> will attempt another mount "retrying test device mount with external set"
>>
>>>>>        fi
>>>>> -    init_rc
>>>> Why remove init_rc here?
>>> Same reason as above.
>> But that's an additional change in behavior.  If there's no reason for
>> calling init_rc() from run_section() then that should be a separate
>> patch with a separate justification.
>
> Since the check for _test_mount should be at the check script level 
> and not at the _begin_fstest(), maybe we should
>
> 1. Keep the init_rc call here
>
> 2. Remove the _test_mount above (the one with "elif [ 
> "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then" ) and have 
> a separate patch for it with proper justification.
>
> 3. NOT have any init_rc call in _begin_fstest(), since the _test_mount 
> related checks would already been done by the time _begin_fstests() 
> gets executed.
>
> The above changes will also not change any existing behavior. Can you 
> please let me know your thoughts and I can send a V2 accordingly?
>
> --NR
>
>>
>> --D
>>
>>>>> -
>>>>>        seq="check.$$"
>>>>>        check="$RESULT_BASE/check"
>>>>> @@ -870,6 +862,8 @@ function run_section()
>>>>>        needwrap=true
>>>>>        if [ ! -z "$SCRATCH_DEV" ]; then
>>>>> +        _check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT 
>>>>> $SCRATCH_MNT
>>>>> +        [ $? -le 1 ] || exit 1
>>>>>          _scratch_unmount 2> /dev/null
>>>>>          # call the overridden mkfs - make sure the FS is built
>>>>>          # the same as we'll create it later.
>>>>> diff --git a/common/preamble b/common/preamble
>>>>> index 0c9ee2e0..c92e55bb 100644
>>>>> --- a/common/preamble
>>>>> +++ b/common/preamble
>>>>> @@ -50,6 +50,7 @@ _begin_fstest()
>>>>>        _register_cleanup _cleanup
>>>>>        . ./common/rc
>>>>> +    init_rc
>>>>>        # remove previous $seqres.full before test
>>>>>        rm -f $seqres.full $seqres.hints
>>>>> diff --git a/common/rc b/common/rc
>>>>> index d2de8588..f153ad81 100644
>>>>> --- a/common/rc
>>>>> +++ b/common/rc
>>>>> @@ -5754,8 +5754,6 @@ _require_program() {
>>>>>        _have_program "$1" || _notrun "$tag required"
>>>>>    }
>>>>> -init_rc
>>>>> -
>>>>> ################################################################################
>>>>>    # make sure this script returns success
>>>>>    /bin/true
>>>>> diff --git a/soak b/soak
>>>>> index d5c4229a..5734d854 100755
>>>>> --- a/soak
>>>>> +++ b/soak
>>>>> @@ -5,6 +5,7 @@
>>>>>    # get standard environment, filters and checks
>>>>>    . ./common/rc
>>>>> +# ToDo: Do we need an init_rc() here? How is soak used?
>>>> I have no idea what soak does and have never used it, but I think for
>>>> continuity's sake you should call init_rc here.
>>> Okay. I think Dave has suggested removing this file[1]. This doesn't 
>>> seem to
>>> used anymore.
>>>
>>> [1] https://lore.kernel.org/all/Z8oT_tBYG-a79CjA@dread.disaster.area/
>>>
>>> --NR
>>>
>>>> --D
>>>>
>>>>>    . ./common/filter
>>>>>    tmp=/tmp/$$
>>>>> -- 
>>>>> 2.34.1
>>>>>
>>>>>
>>> -- 
>>> Nirjhar Roy
>>> Linux Kernel Developer
>>> IBM, Bangalore
>>>
>>>
-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

end of thread, other threads:[~2025-03-18  4:57 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-06  8:17 [PATCH v1 0/2] Minor cleanups in common/rc Nirjhar Roy (IBM)
2025-03-06  8:17 ` [PATCH v1 1/2] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
2025-03-06 17:41   ` Darrick J. Wong
2025-03-06  8:17 ` [PATCH v1 2/2] check,common/{preamble,rc},soak: Decoupling init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
2025-03-06 17:46   ` Darrick J. Wong
2025-03-07  5:51     ` Nirjhar Roy (IBM)
2025-03-07 17:40       ` Darrick J. Wong
2025-03-12  5:46         ` Nirjhar Roy (IBM)
2025-03-18  4:57           ` Nirjhar Roy (IBM)
2025-03-06 21:13   ` Zorro Lang
2025-03-07  5:56     ` Nirjhar Roy (IBM)
2025-03-06 21:30   ` Dave Chinner
2025-03-07  8:05     ` Nirjhar Roy (IBM)
2025-03-08  7:20       ` Zorro Lang
2025-03-10  8:06         ` Zorro Lang
2025-03-12  4:41           ` Nirjhar Roy (IBM)
2025-03-12  4:41         ` Nirjhar Roy (IBM)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).