mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
+31
-2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user