generic: check noreplace renameat2 syscall

Check with RENAME_NOREPLACE flag.  This flag indicates that the
rename must fail if the target of the rename exists.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Miklos Szeredi
2014-04-14 10:37:31 +10:00
committed by Dave Chinner
parent bdf215033d
commit 1f98dd0546
3 changed files with 116 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
#! /bin/bash
# FS QA Test No. generic/024
#
# Check renameat2 syscall with RENAME_NOREPLACE flag
#
#-----------------------------------------------------------------------
# Copyright (c) 2014 Miklos Szeredi. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/renameat2
_supported_fs generic
_supported_os Linux
_requires_renameat2
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_tests $rename_dir -n
rmdir $rename_dir
# success, all done
status=0
exit
+51
View File
@@ -0,0 +1,51 @@
QA output created by 324
samedir none/none -> No such file or directory
samedir none/regu -> No such file or directory
samedir none/symb -> No such file or directory
samedir none/dire -> No such file or directory
samedir none/tree -> No such file or directory
samedir regu/none -> none/regu.
samedir regu/regu -> File exists
samedir regu/symb -> File exists
samedir regu/dire -> File exists
samedir regu/tree -> File exists
samedir symb/none -> none/symb.
samedir symb/regu -> File exists
samedir symb/symb -> File exists
samedir symb/dire -> File exists
samedir symb/tree -> File exists
samedir dire/none -> none/dire.
samedir dire/regu -> File exists
samedir dire/symb -> File exists
samedir dire/dire -> File exists
samedir dire/tree -> File exists
samedir tree/none -> none/tree.
samedir tree/regu -> File exists
samedir tree/symb -> File exists
samedir tree/dire -> File exists
samedir tree/tree -> File exists
crossdir none/none -> No such file or directory
crossdir none/regu -> No such file or directory
crossdir none/symb -> No such file or directory
crossdir none/dire -> No such file or directory
crossdir none/tree -> No such file or directory
crossdir regu/none -> none/regu.
crossdir regu/regu -> File exists
crossdir regu/symb -> File exists
crossdir regu/dire -> File exists
crossdir regu/tree -> File exists
crossdir symb/none -> none/symb.
crossdir symb/regu -> File exists
crossdir symb/symb -> File exists
crossdir symb/dire -> File exists
crossdir symb/tree -> File exists
crossdir dire/none -> none/dire.
crossdir dire/regu -> File exists
crossdir dire/symb -> File exists
crossdir dire/dire -> File exists
crossdir dire/tree -> File exists
crossdir tree/none -> none/tree.
crossdir tree/regu -> File exists
crossdir tree/symb -> File exists
crossdir tree/dire -> File exists
crossdir tree/tree -> File exists
+1
View File
@@ -26,6 +26,7 @@
021 auto quick prealloc 021 auto quick prealloc
022 auto quick prealloc 022 auto quick prealloc
023 auto quick 023 auto quick
024 auto quick
053 acl repair auto quick 053 acl repair auto quick
062 attr udf auto quick 062 attr udf auto quick
068 other auto freeze dangerous stress 068 other auto freeze dangerous stress