On Fri, Oct 28, 2022 at 02:56:03PM -0700, Catherine Hoang wrote: > From: Allison Henderson <allison.henderson@xxxxxxxxxx> > > Add a test to verify basic parent pointers operations (create, move, link, > unlink, rename, overwrite). > > Signed-off-by: Allison Henderson <allison.henderson@xxxxxxxxxx> > Signed-off-by: Catherine Hoang <catherine.hoang@xxxxxxxxxx> > --- > doc/group-names.txt | 1 + > tests/xfs/554 | 101 ++++++++++++++++++++++++++++++++++++++++++++ > tests/xfs/554.out | 59 ++++++++++++++++++++++++++ > 3 files changed, 161 insertions(+) > create mode 100755 tests/xfs/554 > create mode 100644 tests/xfs/554.out > > diff --git a/doc/group-names.txt b/doc/group-names.txt > index ef411b5e..8e35c699 100644 > --- a/doc/group-names.txt > +++ b/doc/group-names.txt > @@ -77,6 +77,7 @@ nfs4_acl NFSv4 access control lists > nonsamefs overlayfs layers on different filesystems > online_repair online repair functionality tests > other dumping ground, do not add more tests to this group > +parent Parent pointer tests > pattern specific IO pattern tests > perms access control and permission checking > pipe pipe functionality > diff --git a/tests/xfs/554 b/tests/xfs/554 Hi, xfs/554 has been taken, please rebase to the lastest for-next branch, or you can a big enough number (e.g. 999) to avoid merging conflict, then I can rename the name after merging. > new file mode 100755 > index 00000000..44b77f9d > --- /dev/null > +++ b/tests/xfs/554 > @@ -0,0 +1,101 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2022, Oracle and/or its affiliates. All Rights Reserved. > +# > +# FS QA Test 554 > +# > +# simple parent pointer test > +# > + > +. ./common/preamble > +_begin_fstest auto quick parent > + > +# get standard environment, filters and checks > +. ./common/parent > + > +# Modify as appropriate > +_supported_fs xfs > +_require_scratch > +_require_xfs_sysfs debug/larp Is debug/larp needed by this case? > +_require_xfs_parent > +_require_xfs_io_command "parent" > + > +# real QA test starts here > + > +# Create a directory tree using a protofile and > +# make sure all inodes created have parent pointers > + > +protofile=$tmp.proto > + > +cat >$protofile <<EOF > +DUMMY1 > +0 0 > +: root directory > +d--777 3 1 > +: a directory > +testfolder1 d--755 3 1 > +file1 ---755 3 1 /dev/null > +$ > +: back in the root > +testfolder2 d--755 3 1 > +file2 ---755 3 1 /dev/null > +: done > +$ > +EOF > + > +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \ > + || _fail "mkfs failed" > +_check_scratch_fs > + > +_scratch_mount >>$seqres.full 2>&1 \ > + || _fail "mount failed" _scratch_mount calls _fail() inside. Thanks, Zorro > + > +testfolder1="testfolder1" > +testfolder2="testfolder2" > +file1="file1" > +file2="file2" > +file3="file3" > +file1_ln="file1_link" > + > +echo "" > +# Create parent pointer test > +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1" > + > +echo "" > +# Move parent pointer test > +mv $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder2/$file1 > +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1" > + > +echo "" > +# Hard link parent pointer test > +ln $SCRATCH_MNT/$testfolder2/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln > +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln" > +_verify_parent "$testfolder1" "$file1_ln" "$testfolder2/$file1" > +_verify_parent "$testfolder2" "$file1" "$testfolder1/$file1_ln" > +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1" > + > +echo "" > +# Remove hard link parent pointer test > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)" > +rm $SCRATCH_MNT/$testfolder2/$file1 > +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln" > +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln" > + > +echo "" > +# Rename parent pointer test > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)" > +mv $SCRATCH_MNT/$testfolder1/$file1_ln $SCRATCH_MNT/$testfolder1/$file2 > +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2" > +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2" > + > +echo "" > +# Over write parent pointer test > +touch $SCRATCH_MNT/$testfolder2/$file3 > +_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3" > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)" > +mv -f $SCRATCH_MNT/$testfolder2/$file3 $SCRATCH_MNT/$testfolder1/$file2 > +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2" > + > +# success, all done > +status=0 > +exit > diff --git a/tests/xfs/554.out b/tests/xfs/554.out > new file mode 100644 > index 00000000..67ea9f2b > --- /dev/null > +++ b/tests/xfs/554.out > @@ -0,0 +1,59 @@ > +QA output created by 554 > + > +*** testfolder1 OK > +*** testfolder1/file1 OK > +*** testfolder1/file1 OK > +*** Verified parent pointer: name:file1, namelen:5 > +*** Parent pointer OK for child testfolder1/file1 > + > +*** testfolder2 OK > +*** testfolder2/file1 OK > +*** testfolder2/file1 OK > +*** Verified parent pointer: name:file1, namelen:5 > +*** Parent pointer OK for child testfolder2/file1 > + > +*** testfolder1 OK > +*** testfolder1/file1_link OK > +*** testfolder1/file1_link OK > +*** Verified parent pointer: name:file1_link, namelen:10 > +*** Parent pointer OK for child testfolder1/file1_link > +*** testfolder1 OK > +*** testfolder2/file1 OK > +*** testfolder1/file1_link OK > +*** Verified parent pointer: name:file1_link, namelen:10 > +*** Parent pointer OK for child testfolder2/file1 > +*** testfolder2 OK > +*** testfolder1/file1_link OK > +*** testfolder2/file1 OK > +*** Verified parent pointer: name:file1, namelen:5 > +*** Parent pointer OK for child testfolder1/file1_link > +*** testfolder2 OK > +*** testfolder2/file1 OK > +*** testfolder2/file1 OK > +*** Verified parent pointer: name:file1, namelen:5 > +*** Parent pointer OK for child testfolder2/file1 > + > +*** testfolder1 OK > +*** testfolder1/file1_link OK > +*** testfolder1/file1_link OK > +*** Verified parent pointer: name:file1_link, namelen:10 > +*** Parent pointer OK for child testfolder1/file1_link > +*** testfolder1/file1_link OK > + > +*** testfolder1 OK > +*** testfolder1/file2 OK > +*** testfolder1/file2 OK > +*** Verified parent pointer: name:file2, namelen:5 > +*** Parent pointer OK for child testfolder1/file2 > +*** testfolder1/file2 OK > + > +*** testfolder2 OK > +*** testfolder2/file3 OK > +*** testfolder2/file3 OK > +*** Verified parent pointer: name:file3, namelen:5 > +*** Parent pointer OK for child testfolder2/file3 > +*** testfolder1 OK > +*** testfolder1/file2 OK > +*** testfolder1/file2 OK > +*** Verified parent pointer: name:file2, namelen:5 > +*** Parent pointer OK for child testfolder1/file2 > -- > 2.25.1 >