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 <kaixuxia@tencent.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
kaixuxia
2019-09-18 19:47:47 +08:00
committed by Eryu Guan
parent 8e5bf2d06f
commit 4908565469
7 changed files with 43 additions and 35 deletions
+31 -2
View File
@@ -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
}
+1 -1
View File
@@ -29,7 +29,7 @@ _supported_fs generic
_supported_os Linux
_require_test
_requires_renameat2
_require_renameat2
_require_test_symlinks
# real QA test starts here
+3 -10
View File
@@ -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
+3 -10
View File
@@ -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
+3 -10
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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