public inbox for linux-ext4@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/6] Minor cleanups in common/
@ 2025-04-08  5:37 Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 1/6] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 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.
This is proposed in [1] and [2]. It also removes direct usage of exit command
with a _exit wrapper. The individual patches have the details.

[v2] --> [v3]
 1. Added R.Bs from Dave[3] and Ritesh in all the patches of [v2]
 2. Replaced status=1;exit with "_exit 1"  in some of the functions I missed in [v2]
 3. Added some comments in the check script(suggested by Ritesh)
 4. Added a new patch (patch 2) that removes redundant sourcing of common/config in generic/367
 5. As of now, I didn't change the definition of _exit() function.

[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/
[3] https://lore.kernel.org/all/Z-xcne3f5Klvuxcq@dread.disaster.area/

[v1] https://lore.kernel.org/all/cover.1741248214.git.nirjhar.roy.lists@gmail.com/
[v2] https://lore.kernel.org/all/cover.1743487913.git.nirjhar.roy.lists@gmail.com/

Nirjhar Roy (IBM) (6):
  generic/749: Remove redundant sourcing of common/rc
  generic/367: Remove redundant sourcing if common/config
  check: Remove redundant _test_mount in check
  check,common{rc,preamble}: Decouple init_rc() call from sourcing
    common/rc
  common/config: Introduce _exit wrapper around exit command
  common: exit --> _exit

 check             |  10 ++---
 common/btrfs      |   6 +--
 common/ceph       |   2 +-
 common/config     |  15 +++++--
 common/dump       |  11 +++--
 common/ext4       |   2 +-
 common/populate   |   2 +-
 common/preamble   |   3 +-
 common/punch      |  13 +++---
 common/rc         | 107 ++++++++++++++++++++++------------------------
 common/repair     |   4 +-
 common/xfs        |   8 ++--
 tests/generic/367 |   1 -
 tests/generic/749 |   1 -
 14 files changed, 91 insertions(+), 94 deletions(-)

--
2.34.1


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

* [PATCH v3 1/6] generic/749: Remove redundant sourcing of common/rc
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config Nirjhar Roy (IBM)
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 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>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@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 v3 2/6] generic/367: Remove redundant sourcing if common/config
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 1/6] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  2025-04-08  9:06   ` Ritesh Harjani
  2025-04-09  5:04   ` Zorro Lang
  2025-04-08  5:37 ` [PATCH v3 3/6] check: Remove redundant _test_mount in check Nirjhar Roy (IBM)
                   ` (3 subsequent siblings)
  5 siblings, 2 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

common/config will be source by _begin_fstest

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

diff --git a/tests/generic/367 b/tests/generic/367
index ed371a02..567db557 100755
--- a/tests/generic/367
+++ b/tests/generic/367
@@ -11,7 +11,6 @@
 # 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
 
-- 
2.34.1


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

* [PATCH v3 3/6] check: Remove redundant _test_mount in check
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 1/6] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 4/6] check,common{rc,preamble}: Decouple init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

init_rc already does a _test_mount. Hence removing the additional
_test_mount call when OLD_TEST_FS_MOUNT_OPTS != TEST_FS_MOUNT_OPTS.

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
---
 check | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/check b/check
index 32890470..3d621210 100755
--- a/check
+++ b/check
@@ -791,13 +791,9 @@ function run_section()
 		. common/rc
 		_prepare_test_list
 	elif [ "$OLD_TEST_FS_MOUNT_OPTS" != "$TEST_FS_MOUNT_OPTS" ]; then
+		# Unmount TEST_DEV to apply the updated mount options.
+		# It will be mounted again by init_rc(), called shortly after.
 		_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
-- 
2.34.1


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

* [PATCH v3 4/6] check,common{rc,preamble}: Decouple init_rc() call from sourcing common/rc
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
                   ` (2 preceding siblings ...)
  2025-04-08  5:37 ` [PATCH v3 3/6] check: Remove redundant _test_mount in check Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command Nirjhar Roy (IBM)
  2025-04-08  5:37 ` [PATCH v3 6/6] common: exit --> _exit Nirjhar Roy (IBM)
  5 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 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 isn't good practice
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>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
---
 check           | 2 ++
 common/preamble | 1 +
 common/rc       | 2 --
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/check b/check
index 3d621210..9451c350 100755
--- a/check
+++ b/check
@@ -364,6 +364,8 @@ if ! . ./common/rc; then
 	exit 1
 fi
 
+init_rc
+
 # If the test config specified a soak test duration, see if there are any
 # unit suffixes that need converting to an integer seconds count.
 if [ -n "$SOAK_DURATION" ]; then
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 16d627e1..038c22f6 100644
--- a/common/rc
+++ b/common/rc
@@ -5817,8 +5817,6 @@ _require_program() {
 	_have_program "$1" || _notrun "$tag required"
 }
 
-init_rc
-
 ################################################################################
 # make sure this script returns success
 /bin/true
-- 
2.34.1


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

* [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
                   ` (3 preceding siblings ...)
  2025-04-08  5:37 ` [PATCH v3 4/6] check,common{rc,preamble}: Decouple init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  2025-04-08  9:13   ` Ritesh Harjani
  2025-04-08 11:35   ` Dave Chinner
  2025-04-08  5:37 ` [PATCH v3 6/6] common: exit --> _exit Nirjhar Roy (IBM)
  5 siblings, 2 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

We should always set the value of status correctly when we are exiting.
Else, "$?" might not give us the correct value.
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". IMO, the correct behavior
should have been that "$?" should have been non-zero.

The next patch will replace exit with _exit.

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
---
 common/config | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/common/config b/common/config
index 79bec87f..eb6af35a 100644
--- a/common/config
+++ b/common/config
@@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
 
 export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
 
+# This functions sets the exit code to status and then exits. Don't use
+# exit directly, as it might not set the value of "status" correctly.
+_exit()
+{
+	status="$1"
+	exit "$status"
+}
+
 # Handle mkfs.$fstyp which does (or does not) require -f to overwrite
 set_mkfs_prog_path_with_opts()
 {
-- 
2.34.1


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

* [PATCH v3 6/6] common: exit --> _exit
  2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
                   ` (4 preceding siblings ...)
  2025-04-08  5:37 ` [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command Nirjhar Roy (IBM)
@ 2025-04-08  5:37 ` Nirjhar Roy (IBM)
  5 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08  5:37 UTC (permalink / raw)
  To: fstests
  Cc: linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

Replace exit <return-val> with _exit <return-val> which
is introduced in the previous patch.

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
---
 common/btrfs    |   6 +--
 common/ceph     |   2 +-
 common/config   |   7 ++--
 common/dump     |  11 +++--
 common/ext4     |   2 +-
 common/populate |   2 +-
 common/preamble |   2 +-
 common/punch    |  13 +++---
 common/rc       | 105 +++++++++++++++++++++++-------------------------
 common/repair   |   4 +-
 common/xfs      |   8 ++--
 11 files changed, 78 insertions(+), 84 deletions(-)

diff --git a/common/btrfs b/common/btrfs
index a3b9c12f..3725632c 100644
--- a/common/btrfs
+++ b/common/btrfs
@@ -80,7 +80,7 @@ _require_btrfs_mkfs_feature()
 {
 	if [ -z $1 ]; then
 		echo "Missing feature name argument for _require_btrfs_mkfs_feature"
-		exit 1
+		_exit 1
 	fi
 	feat=$1
 	$MKFS_BTRFS_PROG -O list-all 2>&1 | \
@@ -104,7 +104,7 @@ _require_btrfs_fs_feature()
 {
 	if [ -z $1 ]; then
 		echo "Missing feature name argument for _require_btrfs_fs_feature"
-		exit 1
+		_exit 1
 	fi
 	feat=$1
 	modprobe btrfs > /dev/null 2>&1
@@ -214,7 +214,7 @@ _check_btrfs_filesystem()
 	if [ $ok -eq 0 ]; then
 		status=1
 		if [ "$iam" != "check" ]; then
-			exit 1
+			_exit 1
 		fi
 		return 1
 	fi
diff --git a/common/ceph b/common/ceph
index d6f24df1..df7a6814 100644
--- a/common/ceph
+++ b/common/ceph
@@ -14,7 +14,7 @@ _ceph_create_file_layout()
 
 	if [ -e $fname ]; then
 		echo "File $fname already exists."
-		exit 1
+		_exit 1
 	fi
 	touch $fname
 	$SETFATTR_PROG -n ceph.file.layout \
diff --git a/common/config b/common/config
index eb6af35a..4c5435b7 100644
--- a/common/config
+++ b/common/config
@@ -123,8 +123,7 @@ set_mkfs_prog_path_with_opts()
 _fatal()
 {
     echo "$*"
-    status=1
-    exit 1
+    _exit 1
 }
 
 export MKFS_PROG="$(type -P mkfs)"
@@ -868,7 +867,7 @@ get_next_config() {
 		echo "Warning: need to define parameters for host $HOST"
 		echo "       or set variables:"
 		echo "       $MC"
-		exit 1
+		_exit 1
 	fi
 
 	_check_device TEST_DEV required $TEST_DEV
@@ -879,7 +878,7 @@ get_next_config() {
 	if [ ! -z "$SCRATCH_DEV_POOL" ]; then
 		if [ ! -z "$SCRATCH_DEV" ]; then
 			echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) should be unset when \$SCRATCH_DEV_POOL ($SCRATCH_DEV_POOL) is set"
-			exit 1
+			_exit 1
 		fi
 		SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
 		export SCRATCH_DEV
diff --git a/common/dump b/common/dump
index 6dcd6250..09859006 100644
--- a/common/dump
+++ b/common/dump
@@ -280,8 +280,7 @@ _create_dumpdir_stress_num()
     rm -rf $dump_dir
     if ! mkdir $dump_dir; then
         echo "    failed to mkdir $dump_dir"
-        status=1
-        exit
+        _exit 1
     fi
 
     # Remove fsstress commands that aren't supported on all xfs configs so that
@@ -480,7 +479,7 @@ _do_create_dumpdir_fill()
 		else
 		    $verbose && echo
 		    echo "Error: cannot mkdir \"$dir\""
-		    exit 1
+		    _exit 1
 		fi
 	    fi
 	else
@@ -496,7 +495,7 @@ _do_create_dumpdir_fill()
 		    else
 			$verbose && echo
 			echo "Error: cannot mkdir \"$dir\""
-			exit 1
+			_exit 1
 		    fi
 		fi
 	    fi
@@ -507,7 +506,7 @@ _do_create_dumpdir_fill()
 	    else
 		$verbose && echo
 		echo "Error: cannot create \"$file\""
-		exit 1
+		_exit 1
 	    fi
 	fi
 	if [ -n "$owner" -a -n "$group" ]; then
@@ -649,7 +648,7 @@ _do_create_dump_symlinks()
 		else
 		    $verbose && echo
 		    echo "Error: cannot mkdir \"$dir\""
-		    exit 1
+		    _exit 1
 		fi
 	    fi
 	fi
diff --git a/common/ext4 b/common/ext4
index e1b336d3..f88fa532 100644
--- a/common/ext4
+++ b/common/ext4
@@ -182,7 +182,7 @@ _require_scratch_ext4_feature()
 {
     if [ -z "$1" ]; then
         echo "Usage: _require_scratch_ext4_feature feature"
-        exit 1
+        _exit 1
     fi
     $MKFS_EXT4_PROG -F $MKFS_OPTIONS -O "$1" \
 		    $SCRATCH_DEV 512m >/dev/null 2>&1 \
diff --git a/common/populate b/common/populate
index 7352f598..50dc75d3 100644
--- a/common/populate
+++ b/common/populate
@@ -1003,7 +1003,7 @@ _fill_fs()
 
 	if [ $# -ne 4 ]; then
 		echo "Usage: _fill_fs filesize dir blocksize switch_user"
-		exit 1
+		_exit 1
 	fi
 
 	if [ $switch_user -eq 0 ]; then
diff --git a/common/preamble b/common/preamble
index c92e55bb..ba029a34 100644
--- a/common/preamble
+++ b/common/preamble
@@ -35,7 +35,7 @@ _begin_fstest()
 {
 	if [ -n "$seq" ]; then
 		echo "_begin_fstest can only be called once!"
-		exit 1
+		_exit 1
 	fi
 
 	seq=`basename $0`
diff --git a/common/punch b/common/punch
index 43ccab69..64d665d8 100644
--- a/common/punch
+++ b/common/punch
@@ -172,16 +172,16 @@ _filter_fiemap_flags()
 	$AWK_PROG -e "$awk_script" | _coalesce_extents
 }
 
-# Filters fiemap output to only print the 
+# Filters fiemap output to only print the
 # file offset column and whether or not
 # it is an extent or a hole
 _filter_hole_fiemap()
 {
 	$AWK_PROG '
 		$3 ~ /hole/ {
-			print $1, $2, $3; 
+			print $1, $2, $3;
 			next;
-		}   
+		}
 		$5 ~ /0x[[:xdigit:]]+/ {
 			print $1, $2, "extent";
 		}' |
@@ -224,8 +224,7 @@ _filter_bmap()
 
 die_now()
 {
-	status=1
-	exit
+	_exit 1
 }
 
 # test the different corner cases for zeroing a range:
@@ -276,7 +275,7 @@ _test_generic_punch()
 		u)	unwritten_tests=
 		;;
 		?)	echo Invalid flag
-		exit 1
+		_exit 1
 		;;
 		esac
 	done
@@ -552,7 +551,7 @@ _test_block_boundaries()
 		d)	sync_cmd=
 		;;
 		?)	echo Invalid flag
-		exit 1
+		_exit 1
 		;;
 		esac
 	done
diff --git a/common/rc b/common/rc
index 038c22f6..3b21eb27 100644
--- a/common/rc
+++ b/common/rc
@@ -909,8 +909,7 @@ _mkfs_dev()
 	# output stored mkfs output
 	cat $tmp.mkfserr >&2
 	cat $tmp.mkfsstd
-	status=1
-	exit 1
+	_exit 1
     fi
     rm -f $tmp.mkfserr $tmp.mkfsstd
 }
@@ -1575,7 +1574,7 @@ _get_pids_by_name()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _get_pids_by_name process-name" 1>&2
-	exit 1
+	_exit 1
     fi
 
     # Algorithm ... all ps(1) variants have a time of the form MM:SS or
@@ -1609,7 +1608,7 @@ _df_device()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _df_device device" 1>&2
-	exit 1
+	_exit 1
     fi
 
     # Note that we use "==" here so awk doesn't try to interpret an NFS over
@@ -1641,7 +1640,7 @@ _df_dir()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _df_dir device" 1>&2
-	exit 1
+	_exit 1
     fi
 
     $DF_PROG $1 2>/dev/null | $AWK_PROG -v what=$1 '
@@ -1667,7 +1666,7 @@ _used()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _used device" 1>&2
-	exit 1
+	_exit 1
     fi
 
     _df_device $1 | $AWK_PROG '{ sub("%", "") ; print $6 }'
@@ -1680,7 +1679,7 @@ _fs_type()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _fs_type device" 1>&2
-	exit 1
+	_exit 1
     fi
 
     #
@@ -1705,7 +1704,7 @@ _fs_options()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _fs_options device" 1>&2
-	exit 1
+	_exit 1
     fi
 
     $AWK_PROG -v dev=$1 '
@@ -1720,7 +1719,7 @@ _is_block_dev()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _is_block_dev dev" 1>&2
-	exit 1
+	_exit 1
     fi
 
     local dev=$1
@@ -1739,7 +1738,7 @@ _is_char_dev()
 {
 	if [ $# -ne 1 ]; then
 		echo "Usage: _is_char_dev dev" 1>&2
-		exit 1
+		_exit 1
 	fi
 
 	local dev=$1
@@ -1772,7 +1771,7 @@ _do()
 	echo -n "$note... "
     else
 	echo "Usage: _do [note] cmd" 1>&2
-	status=1; exit
+	_exit 1
     fi
 
     (eval "echo '---' \"$cmd\"") >>$seqres.full
@@ -1793,7 +1792,7 @@ _do()
     then
 	[ $# -ne 2 ] && echo
 	eval "echo \"$cmd\" failed \(returned $ret\): see $seqres.full"
-	status=1; exit
+	_exit 1
     fi
 
     return $ret
@@ -1809,8 +1808,7 @@ _notrun()
     rm -f ${RESULT_DIR}/require_test*
     rm -f ${RESULT_DIR}/require_scratch*
 
-    status=0
-    exit
+    _exit 0
 }
 
 # just plain bail out
@@ -1819,8 +1817,7 @@ _fail()
 {
     echo "$*" | tee -a $seqres.full
     echo "(see $seqres.full for details)"
-    status=1
-    exit 1
+    _exit 1
 }
 
 #
@@ -2049,14 +2046,14 @@ _require_scratch_nocheck()
 
     _check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
     local err=$?
-    [ $err -le 1 ] || exit 1
+    [ $err -le 1 ] || _exit 1
     if [ $err -eq 0 ]
     then
         # if it's mounted, unmount it
         if ! _scratch_unmount
         then
             echo "failed to unmount $SCRATCH_DEV"
-            exit 1
+            _exit 1
         fi
     fi
     rm -f ${RESULT_DIR}/require_scratch "$RESULT_DIR/.skip_orebuild" "$RESULT_DIR/.skip_rebuild"
@@ -2273,13 +2270,13 @@ _require_test()
 
     _check_mounted_on TEST_DEV $TEST_DEV TEST_DIR $TEST_DIR
     local err=$?
-    [ $err -le 1 ] || exit 1
+    [ $err -le 1 ] || _exit 1
     if [ $err -ne 0 ]
     then
 	if ! _test_mount
 	then
 		echo "!!! failed to mount $TEST_DEV on $TEST_DIR"
-		exit 1
+		_exit 1
 	fi
     fi
     touch ${RESULT_DIR}/require_test
@@ -2391,7 +2388,7 @@ _require_block_device()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _require_block_device <dev>" 1>&2
-		exit 1
+		_exit 1
 	fi
 	if [ "`_is_block_dev "$1"`" == "" ]; then
 		_notrun "require $1 to be valid block disk"
@@ -2404,7 +2401,7 @@ _require_local_device()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _require_local_device <dev>" 1>&2
-		exit 1
+		_exit 1
 	fi
 	if [ "`_is_block_dev "$1"`" != "" ]; then
 		return 0
@@ -2512,7 +2509,7 @@ _zone_type()
 	local target=$1
 	if [ -z $target ]; then
 		echo "Usage: _zone_type <device>"
-		exit 1
+		_exit 1
 	fi
 	local sdev=`_short_dev $target`
 
@@ -2528,7 +2525,7 @@ _require_zoned_device()
 	local target=$1
 	if [ -z $target ]; then
 		echo "Usage: _require_zoned_device <device>"
-		exit 1
+		_exit 1
 	fi
 
 	local type=`_zone_type ${target}`
@@ -2668,7 +2665,7 @@ _run_aiodio()
     if [ -z "$1" ]
     then
         echo "usage: _run_aiodio command_name" 2>&1
-        status=1; exit 1
+        _exit 1
     fi
 
     _require_aiodio $1
@@ -2880,7 +2877,7 @@ _require_xfs_io_command()
 	if [ -z "$1" ]
 	then
 		echo "Usage: _require_xfs_io_command command [switch]" 1>&2
-		exit 1
+		_exit 1
 	fi
 	local command=$1
 	shift
@@ -3364,7 +3361,7 @@ _is_dev_mounted()
 
 	if [ $# -lt 1 ]; then
 		echo "Usage: _is_dev_mounted <device> [fstype]" 1>&2
-		exit 1
+		_exit 1
 	fi
 
 	findmnt -rncv -S $dev -t $fstype -o TARGET | head -1
@@ -3378,7 +3375,7 @@ _is_dir_mountpoint()
 
 	if [ $# -lt 1 ]; then
 		echo "Uasge: _is_dir_mountpoint <dir> [fstype]" 1>&2
-		exit 1
+		_exit 1
 	fi
 
 	findmnt -rncv -t $fstype -o TARGET $dir | head -1
@@ -3391,7 +3388,7 @@ _remount()
     if [ $# -ne 2 ]
     then
 	echo "Usage: _remount device ro/rw" 1>&2
-	exit 1
+	_exit 1
     fi
     local device=$1
     local mode=$2
@@ -3399,7 +3396,7 @@ _remount()
     if ! mount -o remount,$mode $device
     then
         echo "_remount: failed to remount filesystem on $device as $mode"
-        exit 1
+        _exit 1
     fi
 }
 
@@ -3417,7 +3414,7 @@ _umount_or_remount_ro()
     if [ $# -ne 1 ]
     then
 	echo "Usage: _umount_or_remount_ro <device>" 1>&2
-	exit 1
+	_exit 1
     fi
 
     local device=$1
@@ -3435,7 +3432,7 @@ _mount_or_remount_rw()
 {
 	if [ $# -ne 3 ]; then
 		echo "Usage: _mount_or_remount_rw <opts> <dev> <mnt>" 1>&2
-		exit 1
+		_exit 1
 	fi
 	local mount_opts=$1
 	local device=$2
@@ -3516,7 +3513,7 @@ _check_generic_filesystem()
     if [ $ok -eq 0 ]; then
 	status=1
 	if [ "$iam" != "check" ]; then
-		exit 1
+		_exit 1
 	fi
 	return 1
     fi
@@ -3582,7 +3579,7 @@ _check_udf_filesystem()
     if [ $# -ne 1 -a $# -ne 2 ]
     then
 	echo "Usage: _check_udf_filesystem device [last_block]" 1>&2
-	exit 1
+	_exit 1
     fi
 
     if [ ! -x $here/src/udf_test ]
@@ -3776,7 +3773,7 @@ _get_os_name()
 		echo 'linux'
 	else
 		echo Unknown operating system: `uname`
-		exit
+		_exit 1
 	fi
 }
 
@@ -3837,7 +3834,7 @@ _link_out_file()
 _die()
 {
         echo $@
-        exit 1
+        _exit 1
 }
 
 # convert urandom incompressible data to compressible text data
@@ -3994,7 +3991,7 @@ _require_scratch_dev_pool()
 		if _mount | grep -q $i; then
 			if ! _unmount $i; then
 		            echo "failed to unmount $i - aborting"
-		            exit 1
+		            _exit 1
 		        fi
 		fi
 		# To help better debug when something fails, we remove
@@ -4403,7 +4400,7 @@ _require_batched_discard()
 {
 	if [ $# -ne 1 ]; then
 		echo "Usage: _require_batched_discard mnt_point" 1>&2
-		exit 1
+		_exit 1
 	fi
 	_require_fstrim
 
@@ -4630,7 +4627,7 @@ _require_chattr()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _require_chattr <attr>"
-		exit 1
+		_exit 1
 	fi
 	local attribute=$1
 
@@ -4649,7 +4646,7 @@ _get_total_inode()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_total_inode <mnt>"
-		exit 1
+		_exit 1
 	fi
 	local nr_inode;
 	nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $3}'`
@@ -4660,7 +4657,7 @@ _get_used_inode()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_used_inode <mnt>"
-		exit 1
+		_exit 1
 	fi
 	local nr_inode;
 	nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $4}'`
@@ -4671,7 +4668,7 @@ _get_used_inode_percent()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_used_inode_percent <mnt>"
-		exit 1
+		_exit 1
 	fi
 	local pct_inode;
 	pct_inode=`$DF_PROG -i $1 | tail -1 | awk '{ print $6 }' | \
@@ -4683,7 +4680,7 @@ _get_free_inode()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_free_inode <mnt>"
-		exit 1
+		_exit 1
 	fi
 	local nr_inode;
 	nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $5}'`
@@ -4696,7 +4693,7 @@ _get_available_space()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_available_space <mnt>"
-		exit 1
+		_exit 1
 	fi
 	$DF_PROG -B 1 $1 | tail -n1 | awk '{ print $5 }'
 }
@@ -4707,7 +4704,7 @@ _get_total_space()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _get_total_space <mnt>"
-		exit 1
+		_exit 1
 	fi
 	$DF_PROG -B 1 $1 | tail -n1 | awk '{ print $3 }'
 }
@@ -4952,7 +4949,7 @@ init_rc()
 	if [ "$TEST_DEV" = ""  ]
 	then
 		echo "common/rc: Error: \$TEST_DEV is not set"
-		exit 1
+		_exit 1
 	fi
 
 	# if $TEST_DEV is not mounted, mount it now as XFS
@@ -4966,20 +4963,20 @@ init_rc()
 			if ! _test_mount
 			then
 				echo "common/rc: could not mount $TEST_DEV on $TEST_DIR"
-				exit 1
+				_exit 1
 			fi
 		fi
 	fi
 
 	# Sanity check that TEST partition is not mounted at another mount point
 	# or as another fs type
-	_check_mounted_on TEST_DEV $TEST_DEV TEST_DIR $TEST_DIR $FSTYP || exit 1
+	_check_mounted_on TEST_DEV $TEST_DEV TEST_DIR $TEST_DIR $FSTYP || _exit 1
 	if [ -n "$SCRATCH_DEV" ]; then
 		# Sanity check that SCRATCH partition is not mounted at another
 		# mount point, because it is about to be unmounted and formatted.
 		# Another fs type for scratch is fine (bye bye old fs type).
 		_check_mounted_on SCRATCH_DEV $SCRATCH_DEV SCRATCH_MNT $SCRATCH_MNT
-		[ $? -le 1 ] || exit 1
+		[ $? -le 1 ] || _exit 1
 	fi
 
 	# Figure out if we need to add -F ("foreign", deprecated) option to xfs_io
@@ -5029,7 +5026,7 @@ _get_file_block_size()
 {
 	if [ -z $1 ] || [ ! -d $1 ]; then
 		echo "Missing mount point argument for _get_file_block_size"
-		exit 1
+		_exit 1
 	fi
 
 	case "$FSTYP" in
@@ -5076,7 +5073,7 @@ _get_block_size()
 {
 	if [ -z $1 ] || [ ! -d $1 ]; then
 		echo "Missing mount point argument for _get_block_size"
-		exit 1
+		_exit 1
 	fi
 	stat -f -c %S $1
 }
@@ -5146,14 +5143,14 @@ _run_hugepage_fsx() {
 	fi
 	cat $tmp.hugepage_fsx
 	rm -f $tmp.hugepage_fsx
-	test $res -ne 0 && exit 1
+	test $res -ne 0 && _exit 1
 	return 0
 }
 
 # run fsx or exit the test
 run_fsx()
 {
-	_run_fsx "$@" || exit 1
+	_run_fsx "$@" || _exit 1
 }
 
 _require_statx()
@@ -5318,7 +5315,7 @@ _get_max_file_size()
 {
 	if [ -z $1 ] || [ ! -d $1 ]; then
 		echo "Missing mount point argument for _get_max_file_size"
-		exit 1
+		_exit 1
 	fi
 
 	local mnt=$1
diff --git a/common/repair b/common/repair
index a79f9b2b..fd206f8e 100644
--- a/common/repair
+++ b/common/repair
@@ -16,7 +16,7 @@ _zero_position()
 		}'`
 	if [ -z "$offset" -o -z "$length" ]; then
 		echo "cannot calculate offset ($offset) or length ($length)"
-		exit
+		_exit 1
 	fi
 	length=`expr $length / 512`
 	$here/src/devzero -v $value -b 1 -n $length -o $offset $SCRATCH_DEV \
@@ -113,7 +113,7 @@ _filter_dd()
 }
 
 # do some controlled corrupting & ensure repair recovers us
-# 
+#
 _check_repair()
 {
 	value=$1
diff --git a/common/xfs b/common/xfs
index 81d568d3..96c15f3c 100644
--- a/common/xfs
+++ b/common/xfs
@@ -553,7 +553,7 @@ _require_xfs_db_command()
 {
 	if [ $# -ne 1 ]; then
 		echo "Usage: _require_xfs_db_command command" 1>&2
-		exit 1
+		_exit 1
 	fi
 	command=$1
 
@@ -789,7 +789,7 @@ _check_xfs_filesystem()
 
 	if [ $# -ne 3 ]; then
 		echo "Usage: _check_xfs_filesystem device <logdev>|none <rtdev>|none" 1>&2
-		exit 1
+		_exit 1
 	fi
 
 	extra_mount_options=""
@@ -1014,7 +1014,7 @@ _check_xfs_filesystem()
 	if [ $ok -eq 0 ]; then
 		status=1
 		if [ "$iam" != "check" ]; then
-			exit 1
+			_exit 1
 		fi
 		return 1
 	fi
@@ -1379,7 +1379,7 @@ _require_xfs_spaceman_command()
 {
 	if [ -z "$1" ]; then
 		echo "Usage: _require_xfs_spaceman_command command [switch]" 1>&2
-		exit 1
+		_exit 1
 	fi
 	local command=$1
 	shift
-- 
2.34.1


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

* Re: [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config
  2025-04-08  5:37 ` [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config Nirjhar Roy (IBM)
@ 2025-04-08  9:06   ` Ritesh Harjani
  2025-04-09  5:04   ` Zorro Lang
  1 sibling, 0 replies; 17+ messages in thread
From: Ritesh Harjani @ 2025-04-08  9:06 UTC (permalink / raw)
  To: Nirjhar Roy (IBM), fstests
  Cc: linux-ext4, linux-xfs, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

"Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:

> common/config will be source by _begin_fstest
>

Looks good to me. Please feel free to add:

Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>

> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---
>  tests/generic/367 | 1 -
>  1 file changed, 1 deletion(-)
>
> diff --git a/tests/generic/367 b/tests/generic/367
> index ed371a02..567db557 100755
> --- a/tests/generic/367
> +++ b/tests/generic/367
> @@ -11,7 +11,6 @@
>  # 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
>  
> -- 
> 2.34.1

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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08  5:37 ` [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command Nirjhar Roy (IBM)
@ 2025-04-08  9:13   ` Ritesh Harjani
  2025-04-08 16:15     ` Nirjhar Roy (IBM)
  2025-04-08 11:35   ` Dave Chinner
  1 sibling, 1 reply; 17+ messages in thread
From: Ritesh Harjani @ 2025-04-08  9:13 UTC (permalink / raw)
  To: Nirjhar Roy (IBM), fstests
  Cc: linux-ext4, linux-xfs, ojaswin, djwong, zlang, david,
	nirjhar.roy.lists

"Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:

> We should always set the value of status correctly when we are exiting.
> Else, "$?" might not give us the correct value.
> 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". IMO, the correct behavior
> should have been that "$?" should have been non-zero.
>
> The next patch will replace exit with _exit.
>
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
> Reviewed-by: Dave Chinner <dchinner@redhat.com>
> ---
>  common/config | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/common/config b/common/config
> index 79bec87f..eb6af35a 100644
> --- a/common/config
> +++ b/common/config
> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>  
>  export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>  
> +# This functions sets the exit code to status and then exits. Don't use
> +# exit directly, as it might not set the value of "status" correctly.

...as it might not set the value of "$status" correctly, which is used
as an exit code in the trap handler routine set up by the check script.

> +_exit()
> +{
> +	status="$1"
> +	exit "$status"
> +}
> +

I agree with Darrick’s suggestion here. It’s safer to update status only
when an argument is passed - otherwise, it’s easy to trip over this.

Let’s also avoid defaulting status to 0 inside _exit(). That way, if the
caller forgets to pass an argument but has explicitly set status
earlier, we preserve the intended value.

We should update _exit() with... 

test -n "$1" && status="$1"

-ritesh


>  # Handle mkfs.$fstyp which does (or does not) require -f to overwrite
>  set_mkfs_prog_path_with_opts()
>  {
> -- 
> 2.34.1

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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08  5:37 ` [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command Nirjhar Roy (IBM)
  2025-04-08  9:13   ` Ritesh Harjani
@ 2025-04-08 11:35   ` Dave Chinner
  2025-04-08 16:43     ` Nirjhar Roy (IBM)
  1 sibling, 1 reply; 17+ messages in thread
From: Dave Chinner @ 2025-04-08 11:35 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang

On Tue, Apr 08, 2025 at 05:37:21AM +0000, Nirjhar Roy (IBM) wrote:
> We should always set the value of status correctly when we are exiting.
> Else, "$?" might not give us the correct value.
> 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". IMO, the correct behavior
> should have been that "$?" should have been non-zero.
> 
> The next patch will replace exit with _exit.
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
> Reviewed-by: Dave Chinner <dchinner@redhat.com>
> ---
>  common/config | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/common/config b/common/config
> index 79bec87f..eb6af35a 100644
> --- a/common/config
> +++ b/common/config
> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>  
>  export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>  
> +# This functions sets the exit code to status and then exits. Don't use
> +# exit directly, as it might not set the value of "status" correctly.
> +_exit()
> +{
> +	status="$1"
> +	exit "$status"
> +}

The only issue with putting this helper in common/config is that
calling _exit() requires sourcing common/config from the shell
context that calls it.

This means every test must source common/config and re-execute the
environment setup, even though we already have all the environment
set up because it was exported from check when it sourced
common/config.

We have the same problem with _fatal() - it is defined in
common/config instead of an independent common file. If we put such
functions in their own common file, they can be sourced
without dependencies on any other common file being included first.

e.g. we create common/exit and place all the functions that
terminate tests in it - _fatal, _notrun, _exit, etc and source that
file once per shell context before we source common/config,
common/rc, etc. This means we can source and call those termination
functions from any context without having to worry about
dependencies...

-Dave.

-- 
Dave Chinner
david@fromorbit.com

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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08  9:13   ` Ritesh Harjani
@ 2025-04-08 16:15     ` Nirjhar Roy (IBM)
  2025-04-08 16:32       ` Darrick J. Wong
  0 siblings, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08 16:15 UTC (permalink / raw)
  To: Ritesh Harjani (IBM), fstests
  Cc: linux-ext4, linux-xfs, ojaswin, djwong, zlang, david


On 4/8/25 14:43, Ritesh Harjani (IBM) wrote:
> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>
>> We should always set the value of status correctly when we are exiting.
>> Else, "$?" might not give us the correct value.
>> 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". IMO, the correct behavior
>> should have been that "$?" should have been non-zero.
>>
>> The next patch will replace exit with _exit.
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>> Reviewed-by: Dave Chinner <dchinner@redhat.com>
>> ---
>>   common/config | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/common/config b/common/config
>> index 79bec87f..eb6af35a 100644
>> --- a/common/config
>> +++ b/common/config
>> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>>   
>>   export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>>   
>> +# This functions sets the exit code to status and then exits. Don't use
>> +# exit directly, as it might not set the value of "status" correctly.
> ...as it might not set the value of "$status" correctly, which is used
> as an exit code in the trap handler routine set up by the check script.
>
>> +_exit()
>> +{
>> +	status="$1"
>> +	exit "$status"
>> +}
>> +
> I agree with Darrick’s suggestion here. It’s safer to update status only
> when an argument is passed - otherwise, it’s easy to trip over this.
>
> Let’s also avoid defaulting status to 0 inside _exit(). That way, if the
> caller forgets to pass an argument but has explicitly set status
> earlier, we preserve the intended value.
>
> We should update _exit() with...
>
> test -n "$1" && status="$1"

Okay, so in that case if someone does "status=<value>;_exit", we should 
end up with the "<value>" instead of something else, right?

--NR

>
> -ritesh
>
>
>>   # Handle mkfs.$fstyp which does (or does not) require -f to overwrite
>>   set_mkfs_prog_path_with_opts()
>>   {
>> -- 
>> 2.34.1

-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08 16:15     ` Nirjhar Roy (IBM)
@ 2025-04-08 16:32       ` Darrick J. Wong
  2025-04-08 16:35         ` Nirjhar Roy (IBM)
  0 siblings, 1 reply; 17+ messages in thread
From: Darrick J. Wong @ 2025-04-08 16:32 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: Ritesh Harjani (IBM), fstests, linux-ext4, linux-xfs, ojaswin,
	zlang, david

On Tue, Apr 08, 2025 at 09:45:53PM +0530, Nirjhar Roy (IBM) wrote:
> 
> On 4/8/25 14:43, Ritesh Harjani (IBM) wrote:
> > "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
> > 
> > > We should always set the value of status correctly when we are exiting.
> > > Else, "$?" might not give us the correct value.
> > > 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". IMO, the correct behavior
> > > should have been that "$?" should have been non-zero.
> > > 
> > > The next patch will replace exit with _exit.
> > > 
> > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> > > Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
> > > Reviewed-by: Dave Chinner <dchinner@redhat.com>
> > > ---
> > >   common/config | 8 ++++++++
> > >   1 file changed, 8 insertions(+)
> > > 
> > > diff --git a/common/config b/common/config
> > > index 79bec87f..eb6af35a 100644
> > > --- a/common/config
> > > +++ b/common/config
> > > @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
> > >   export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
> > > +# This functions sets the exit code to status and then exits. Don't use
> > > +# exit directly, as it might not set the value of "status" correctly.
> > ...as it might not set the value of "$status" correctly, which is used
> > as an exit code in the trap handler routine set up by the check script.
> > 
> > > +_exit()
> > > +{
> > > +	status="$1"
> > > +	exit "$status"
> > > +}
> > > +
> > I agree with Darrick’s suggestion here. It’s safer to update status only
> > when an argument is passed - otherwise, it’s easy to trip over this.
> > 
> > Let’s also avoid defaulting status to 0 inside _exit(). That way, if the
> > caller forgets to pass an argument but has explicitly set status
> > earlier, we preserve the intended value.
> > 
> > We should update _exit() with...
> > 
> > test -n "$1" && status="$1"
> 
> Okay, so in that case if someone does "status=<value>;_exit", we should end
> up with the "<value>" instead of something else, right?

Right.  I think.  AFAICT the following simple program actually does
return 5 despite the cleanup:

trap 'echo cleanup' INT QUIT TERM EXIT
exit 5

But since fstests set a variable named "status" and then "exit $status"
from cleanup, I think it doesn't matter how status gets set as long as
it /does/ get set somewhere.

--D

> --NR
> 
> > 
> > -ritesh
> > 
> > 
> > >   # Handle mkfs.$fstyp which does (or does not) require -f to overwrite
> > >   set_mkfs_prog_path_with_opts()
> > >   {
> > > -- 
> > > 2.34.1
> 
> -- 
> Nirjhar Roy
> Linux Kernel Developer
> IBM, Bangalore
> 

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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08 16:32       ` Darrick J. Wong
@ 2025-04-08 16:35         ` Nirjhar Roy (IBM)
  0 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08 16:35 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Ritesh Harjani (IBM), fstests, linux-ext4, linux-xfs, ojaswin,
	zlang, david


On 4/8/25 22:02, Darrick J. Wong wrote:
> On Tue, Apr 08, 2025 at 09:45:53PM +0530, Nirjhar Roy (IBM) wrote:
>> On 4/8/25 14:43, Ritesh Harjani (IBM) wrote:
>>> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>>>
>>>> We should always set the value of status correctly when we are exiting.
>>>> Else, "$?" might not give us the correct value.
>>>> 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". IMO, the correct behavior
>>>> should have been that "$?" should have been non-zero.
>>>>
>>>> The next patch will replace exit with _exit.
>>>>
>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>>>> Reviewed-by: Dave Chinner <dchinner@redhat.com>
>>>> ---
>>>>    common/config | 8 ++++++++
>>>>    1 file changed, 8 insertions(+)
>>>>
>>>> diff --git a/common/config b/common/config
>>>> index 79bec87f..eb6af35a 100644
>>>> --- a/common/config
>>>> +++ b/common/config
>>>> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>>>>    export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>>>> +# This functions sets the exit code to status and then exits. Don't use
>>>> +# exit directly, as it might not set the value of "status" correctly.
>>> ...as it might not set the value of "$status" correctly, which is used
>>> as an exit code in the trap handler routine set up by the check script.
>>>
>>>> +_exit()
>>>> +{
>>>> +	status="$1"
>>>> +	exit "$status"
>>>> +}
>>>> +
>>> I agree with Darrick’s suggestion here. It’s safer to update status only
>>> when an argument is passed - otherwise, it’s easy to trip over this.
>>>
>>> Let’s also avoid defaulting status to 0 inside _exit(). That way, if the
>>> caller forgets to pass an argument but has explicitly set status
>>> earlier, we preserve the intended value.
>>>
>>> We should update _exit() with...
>>>
>>> test -n "$1" && status="$1"
>> Okay, so in that case if someone does "status=<value>;_exit", we should end
>> up with the "<value>" instead of something else, right?
> Right.  I think.  AFAICT the following simple program actually does
> return 5 despite the cleanup:
>
> trap 'echo cleanup' INT QUIT TERM EXIT
> exit 5
>
> But since fstests set a variable named "status" and then "exit $status"
> from cleanup, I think it doesn't matter how status gets set as long as
> it /does/ get set somewhere.

Right, I have got the idea. I will make the changes in next revision.

--NR

>
> --D
>
>> --NR
>>
>>> -ritesh
>>>
>>>
>>>>    # Handle mkfs.$fstyp which does (or does not) require -f to overwrite
>>>>    set_mkfs_prog_path_with_opts()
>>>>    {
>>>> -- 
>>>> 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 v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08 11:35   ` Dave Chinner
@ 2025-04-08 16:43     ` Nirjhar Roy (IBM)
  2025-04-09  0:44       ` Dave Chinner
  0 siblings, 1 reply; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-08 16:43 UTC (permalink / raw)
  To: Dave Chinner
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang


On 4/8/25 17:05, Dave Chinner wrote:
> On Tue, Apr 08, 2025 at 05:37:21AM +0000, Nirjhar Roy (IBM) wrote:
>> We should always set the value of status correctly when we are exiting.
>> Else, "$?" might not give us the correct value.
>> 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". IMO, the correct behavior
>> should have been that "$?" should have been non-zero.
>>
>> The next patch will replace exit with _exit.
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>> Reviewed-by: Dave Chinner <dchinner@redhat.com>
>> ---
>>   common/config | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/common/config b/common/config
>> index 79bec87f..eb6af35a 100644
>> --- a/common/config
>> +++ b/common/config
>> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>>   
>>   export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>>   
>> +# This functions sets the exit code to status and then exits. Don't use
>> +# exit directly, as it might not set the value of "status" correctly.
>> +_exit()
>> +{
>> +	status="$1"
>> +	exit "$status"
>> +}
> The only issue with putting this helper in common/config is that
> calling _exit() requires sourcing common/config from the shell
> context that calls it.
>
> This means every test must source common/config and re-execute the
> environment setup, even though we already have all the environment
> set up because it was exported from check when it sourced
> common/config.
>
> We have the same problem with _fatal() - it is defined in
> common/config instead of an independent common file. If we put such
> functions in their own common file, they can be sourced
> without dependencies on any other common file being included first.
>
> e.g. we create common/exit and place all the functions that
> terminate tests in it - _fatal, _notrun, _exit, etc and source that
> file once per shell context before we source common/config,
> common/rc, etc. This means we can source and call those termination
> functions from any context without having to worry about
> dependencies...

Yes, I agree to the above. Do you want this refactoring to be done as a 
part of this patch series in the further revisions, or can this be sent 
as a separate series?

--NR

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


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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-08 16:43     ` Nirjhar Roy (IBM)
@ 2025-04-09  0:44       ` Dave Chinner
  2025-04-09  7:07         ` Nirjhar Roy (IBM)
  0 siblings, 1 reply; 17+ messages in thread
From: Dave Chinner @ 2025-04-09  0:44 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang

On Tue, Apr 08, 2025 at 10:13:54PM +0530, Nirjhar Roy (IBM) wrote:
> On 4/8/25 17:05, Dave Chinner wrote:
> > On Tue, Apr 08, 2025 at 05:37:21AM +0000, Nirjhar Roy (IBM) wrote:
> > > diff --git a/common/config b/common/config
> > > index 79bec87f..eb6af35a 100644
> > > --- a/common/config
> > > +++ b/common/config
> > > @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
> > >   export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
> > > +# This functions sets the exit code to status and then exits. Don't use
> > > +# exit directly, as it might not set the value of "status" correctly.
> > > +_exit()
> > > +{
> > > +	status="$1"
> > > +	exit "$status"
> > > +}
> > The only issue with putting this helper in common/config is that
> > calling _exit() requires sourcing common/config from the shell
> > context that calls it.
> > 
> > This means every test must source common/config and re-execute the
> > environment setup, even though we already have all the environment
> > set up because it was exported from check when it sourced
> > common/config.
> > 
> > We have the same problem with _fatal() - it is defined in
> > common/config instead of an independent common file. If we put such
> > functions in their own common file, they can be sourced
> > without dependencies on any other common file being included first.
> > 
> > e.g. we create common/exit and place all the functions that
> > terminate tests in it - _fatal, _notrun, _exit, etc and source that
> > file once per shell context before we source common/config,
> > common/rc, etc. This means we can source and call those termination
> > functions from any context without having to worry about
> > dependencies...
> 
> Yes, I agree to the above. Do you want this refactoring to be done as a part
> of this patch series in the further revisions, or can this be sent as a
> separate series?

Seperate series is fine. You're not making the dependency mess any
worse than it already is with this change...

-Dave.
-- 
Dave Chinner
david@fromorbit.com

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

* Re: [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config
  2025-04-08  5:37 ` [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config Nirjhar Roy (IBM)
  2025-04-08  9:06   ` Ritesh Harjani
@ 2025-04-09  5:04   ` Zorro Lang
  1 sibling, 0 replies; 17+ messages in thread
From: Zorro Lang @ 2025-04-09  5:04 UTC (permalink / raw)
  To: Nirjhar Roy (IBM)
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang, david

On Tue, Apr 08, 2025 at 05:37:18AM +0000, Nirjhar Roy (IBM) wrote:
> common/config will be source by _begin_fstest
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---

Reviewed-by: Zorro Lang <zlang@redhat.com>

>  tests/generic/367 | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/tests/generic/367 b/tests/generic/367
> index ed371a02..567db557 100755
> --- a/tests/generic/367
> +++ b/tests/generic/367
> @@ -11,7 +11,6 @@
>  # 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
>  
> -- 
> 2.34.1
> 
> 


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

* Re: [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command
  2025-04-09  0:44       ` Dave Chinner
@ 2025-04-09  7:07         ` Nirjhar Roy (IBM)
  0 siblings, 0 replies; 17+ messages in thread
From: Nirjhar Roy (IBM) @ 2025-04-09  7:07 UTC (permalink / raw)
  To: Dave Chinner
  Cc: fstests, linux-ext4, linux-xfs, ritesh.list, ojaswin, djwong,
	zlang


On 4/9/25 06:14, Dave Chinner wrote:
> On Tue, Apr 08, 2025 at 10:13:54PM +0530, Nirjhar Roy (IBM) wrote:
>> On 4/8/25 17:05, Dave Chinner wrote:
>>> On Tue, Apr 08, 2025 at 05:37:21AM +0000, Nirjhar Roy (IBM) wrote:
>>>> diff --git a/common/config b/common/config
>>>> index 79bec87f..eb6af35a 100644
>>>> --- a/common/config
>>>> +++ b/common/config
>>>> @@ -96,6 +96,14 @@ export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>>>>    export RECREATE_TEST_DEV=${RECREATE_TEST_DEV:=false}
>>>> +# This functions sets the exit code to status and then exits. Don't use
>>>> +# exit directly, as it might not set the value of "status" correctly.
>>>> +_exit()
>>>> +{
>>>> +	status="$1"
>>>> +	exit "$status"
>>>> +}
>>> The only issue with putting this helper in common/config is that
>>> calling _exit() requires sourcing common/config from the shell
>>> context that calls it.
>>>
>>> This means every test must source common/config and re-execute the
>>> environment setup, even though we already have all the environment
>>> set up because it was exported from check when it sourced
>>> common/config.
>>>
>>> We have the same problem with _fatal() - it is defined in
>>> common/config instead of an independent common file. If we put such
>>> functions in their own common file, they can be sourced
>>> without dependencies on any other common file being included first.
>>>
>>> e.g. we create common/exit and place all the functions that
>>> terminate tests in it - _fatal, _notrun, _exit, etc and source that
>>> file once per shell context before we source common/config,
>>> common/rc, etc. This means we can source and call those termination
>>> functions from any context without having to worry about
>>> dependencies...
>> Yes, I agree to the above. Do you want this refactoring to be done as a part
>> of this patch series in the further revisions, or can this be sent as a
>> separate series?
> Seperate series is fine. You're not making the dependency mess any
> worse than it already is with this change...

Okay, got it. I will add this list of ToDos. Thank you so much for this 
suggestion.

--NR

>
> -Dave.

-- 
Nirjhar Roy
Linux Kernel Developer
IBM, Bangalore


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

end of thread, other threads:[~2025-04-09  7:07 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-08  5:37 [PATCH v3 0/6] Minor cleanups in common/ Nirjhar Roy (IBM)
2025-04-08  5:37 ` [PATCH v3 1/6] generic/749: Remove redundant sourcing of common/rc Nirjhar Roy (IBM)
2025-04-08  5:37 ` [PATCH v3 2/6] generic/367: Remove redundant sourcing if common/config Nirjhar Roy (IBM)
2025-04-08  9:06   ` Ritesh Harjani
2025-04-09  5:04   ` Zorro Lang
2025-04-08  5:37 ` [PATCH v3 3/6] check: Remove redundant _test_mount in check Nirjhar Roy (IBM)
2025-04-08  5:37 ` [PATCH v3 4/6] check,common{rc,preamble}: Decouple init_rc() call from sourcing common/rc Nirjhar Roy (IBM)
2025-04-08  5:37 ` [PATCH v3 5/6] common/config: Introduce _exit wrapper around exit command Nirjhar Roy (IBM)
2025-04-08  9:13   ` Ritesh Harjani
2025-04-08 16:15     ` Nirjhar Roy (IBM)
2025-04-08 16:32       ` Darrick J. Wong
2025-04-08 16:35         ` Nirjhar Roy (IBM)
2025-04-08 11:35   ` Dave Chinner
2025-04-08 16:43     ` Nirjhar Roy (IBM)
2025-04-09  0:44       ` Dave Chinner
2025-04-09  7:07         ` Nirjhar Roy (IBM)
2025-04-08  5:37 ` [PATCH v3 6/6] common: exit --> _exit 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