From: kaixuxia Date: Wed, 18 Sep 2019 11:47:47 +0000 (+0800) Subject: common: check if a given rename flag is supported in _require_renameat2 X-Git-Tag: v2022.05.01~1042 X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=commitdiff_plain;h=4908565469c5082ebe598fa121be6fc125cc0705;hp=8e5bf2d06fdc9b9b3def05f6c37676e4659cbd65 common: check if a given rename flag is supported in _require_renameat2 Some testcases may require a special rename flag, such as RENAME_WHITEOUT, so add support check for if a given rename flag is supported in _require_renameat2. [Eryu: rename the helper to _require_renameat2 while we're at it, and add 'exchange' check to generic/398 and generic/419] Signed-off-by: kaixuxia Reviewed-by: Brian Foster Signed-off-by: Eryu Guan --- diff --git a/common/renameat2 b/common/renameat2 index f8d6d4f7..2538141c 100644 --- a/common/renameat2 +++ b/common/renameat2 @@ -101,12 +101,41 @@ _rename_tests() # # This checks whether the renameat2 syscall is supported # -_requires_renameat2() +_require_renameat2() { + local flags=$1 + local rename_dir=$TEST_DIR/$$ + local cmd="" + if test ! -x src/renameat2; then _notrun "renameat2 binary not found" fi - if ! src/renameat2 -t; then + + mkdir $rename_dir + touch $rename_dir/foo + case $flags in + "noreplace") + cmd="-n $rename_dir/foo $rename_dir/bar" + ;; + "exchange") + touch $rename_dir/bar + cmd="-x $rename_dir/foo $rename_dir/bar" + ;; + "whiteout") + touch $rename_dir/bar + cmd="-w $rename_dir/foo $rename_dir/bar" + ;; + "") + cmd="" + ;; + *) + rm -rf $rename_dir + _fail "_require_renameat2: only support noreplace,exchange,whiteout rename flags" + ;; + esac + if ! src/renameat2 -t $cmd; then + rm -rf $rename_dir _notrun "kernel doesn't support renameat2 syscall" fi + rm -rf $rename_dir } diff --git a/tests/generic/023 b/tests/generic/023 index 67739b1d..ea40f3d2 100755 --- a/tests/generic/023 +++ b/tests/generic/023 @@ -29,7 +29,7 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_require_renameat2 _require_test_symlinks # real QA test starts here diff --git a/tests/generic/024 b/tests/generic/024 index 2888c661..531a515f 100755 --- a/tests/generic/024 +++ b/tests/generic/024 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_require_renameat2 noreplace _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo -if ! src/renameat2 -t -n $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_NOREPLACE" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -n rmdir $rename_dir diff --git a/tests/generic/025 b/tests/generic/025 index 0310efa5..e69d655f 100755 --- a/tests/generic/025 +++ b/tests/generic/025 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_require_renameat2 exchange _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo $rename_dir/bar -if ! src/renameat2 -t -x $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_EXCHANGE" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -x rmdir $rename_dir diff --git a/tests/generic/078 b/tests/generic/078 index 9608574f..a421a8ab 100755 --- a/tests/generic/078 +++ b/tests/generic/078 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_require_renameat2 whiteout _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo $rename_dir/bar -if ! src/renameat2 -t -w $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_WHITEOUT" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -w rmdir $rename_dir diff --git a/tests/generic/398 b/tests/generic/398 index b1af65e5..d224e021 100755 --- a/tests/generic/398 +++ b/tests/generic/398 @@ -56,7 +56,7 @@ rm -f $seqres.full _supported_fs generic _supported_os Linux _require_scratch_encryption -_requires_renameat2 +_require_renameat2 exchange _new_session_keyring _scratch_mkfs_encrypted &>> $seqres.full diff --git a/tests/generic/419 b/tests/generic/419 index 2f1d34c6..0abbac90 100755 --- a/tests/generic/419 +++ b/tests/generic/419 @@ -39,7 +39,7 @@ _supported_fs generic _supported_os Linux _require_scratch_encryption _require_command "$KEYCTL_PROG" keyctl -_requires_renameat2 +_require_renameat2 exchange _new_session_keyring