* [PATCH v2 0/4] xfstests: add parent pointer tests
@ 2022-10-12 1:38 Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 1/4] common: add helpers for " Catherine Hoang
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Catherine Hoang @ 2022-10-12 1:38 UTC (permalink / raw)
To: linux-xfs, fstests
Hi all,
These are the tests for Allison's parent pointer series:
https://lore.kernel.org/linux-xfs/20220922054458.40826-1-allison.henderson@oracle.com/
These tests cover basic parent pointer operations, multiple links, and
error inject. This patch also adds a new parent group and parent common
functions.
v1->v2:
- Print name and length of bad parent pointer
- Remove line that explicitly turns on LARP mode
- Remove unnecessary empty lines
- Split single patch into multiple patches
- Add _require_xfs_parent function
- Check that mkfs/kernel/xfs_io supports parent pointers
Comments and feedback appreciated!
Catherine
Allison Henderson (4):
common: add helpers for parent pointer tests
xfs: add parent pointer test
xfs: add multi link parent pointer test
xfs: add parent pointer inject test
common/parent | 198 +++++++++
common/rc | 3 +
common/xfs | 12 +
doc/group-names.txt | 1 +
tests/xfs/554 | 125 ++++++
tests/xfs/554.out | 59 +++
tests/xfs/555 | 96 +++++
tests/xfs/555.out | 1002 +++++++++++++++++++++++++++++++++++++++++++
tests/xfs/556 | 110 +++++
tests/xfs/556.out | 14 +
10 files changed, 1620 insertions(+)
create mode 100644 common/parent
create mode 100755 tests/xfs/554
create mode 100644 tests/xfs/554.out
create mode 100755 tests/xfs/555
create mode 100644 tests/xfs/555.out
create mode 100755 tests/xfs/556
create mode 100644 tests/xfs/556.out
--
2.25.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/4] common: add helpers for parent pointer tests
2022-10-12 1:38 [PATCH v2 0/4] xfstests: add parent pointer tests Catherine Hoang
@ 2022-10-12 1:38 ` Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 2/4] xfs: add parent pointer test Catherine Hoang
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Catherine Hoang @ 2022-10-12 1:38 UTC (permalink / raw)
To: linux-xfs, fstests
From: Allison Henderson <allison.henderson@oracle.com>
Add helper functions in common/parent to parse and verify parent
pointers. Also add functions to check that mkfs, kernel, and xfs_io
support parent pointers.
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
common/parent | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++
common/rc | 3 +
common/xfs | 12 +++
3 files changed, 213 insertions(+)
create mode 100644 common/parent
diff --git a/common/parent b/common/parent
new file mode 100644
index 00000000..a0ba7d92
--- /dev/null
+++ b/common/parent
@@ -0,0 +1,198 @@
+#
+# Parent pointer common functions
+#
+
+#
+# parse_parent_pointer parents parent_inode parent_pointer_name
+#
+# Given a list of parent pointers, find the record that matches
+# the given inode and filename
+#
+# inputs:
+# parents : A list of parent pointers in the format of:
+# inode/generation/name_length/name
+# parent_inode : The parent inode to search for
+# parent_name : The parent name to search for
+#
+# outputs:
+# PPINO : Parent pointer inode
+# PPGEN : Parent pointer generation
+# PPNAME : Parent pointer name
+# PPNAME_LEN : Parent pointer name length
+#
+_parse_parent_pointer()
+{
+ local parents=$1
+ local pino=$2
+ local parent_pointer_name=$3
+
+ local found=0
+
+ # Find the entry that has the same inode as the parent
+ # and parse out the entry info
+ while IFS=\/ read PPINO PPGEN PPNAME_LEN PPNAME; do
+ if [ "$PPINO" != "$pino" ]; then
+ continue
+ fi
+
+ if [ "$PPNAME" != "$parent_pointer_name" ]; then
+ continue
+ fi
+
+ found=1
+ break
+ done <<< $(echo "$parents")
+
+ # Check to see if we found anything
+ # We do not fail the test because we also use this
+ # routine to verify when parent pointers should
+ # be removed or updated (ie a rename or a move
+ # operation changes your parent pointer)
+ if [ $found -eq "0" ]; then
+ return 1
+ fi
+
+ # Verify the parent pointer name length is correct
+ if [ "$PPNAME_LEN" -ne "${#parent_pointer_name}" ]
+ then
+ echo "*** Bad parent pointer:"\
+ "name:$PPNAME, namelen:$PPNAME_LEN"
+ fi
+
+ #return sucess
+ return 0
+}
+
+#
+# _verify_parent parent_path parent_pointer_name child_path
+#
+# Verify that the given child path lists the given parent as a parent pointer
+# and that the parent pointer name matches the given name
+#
+# Examples:
+#
+# #simple example
+# mkdir testfolder1
+# touch testfolder1/file1
+# verify_parent testfolder1 file1 testfolder1/file1
+#
+# # In this above example, we want to verify that "testfolder1"
+# # appears as a parent pointer of "testfolder1/file1". Additionally
+# # we verify that the name record of the parent pointer is "file1"
+#
+#
+# #hardlink example
+# mkdir testfolder1
+# mkdir testfolder2
+# touch testfolder1/file1
+# ln testfolder1/file1 testfolder2/file1_ln
+# verify_parent testfolder2 file1_ln testfolder1/file1
+#
+# # In this above example, we want to verify that "testfolder2"
+# # appears as a parent pointer of "testfolder1/file1". Additionally
+# # we verify that the name record of the parent pointer is "file1_ln"
+#
+_verify_parent()
+{
+ local parent_path=$1
+ local parent_pointer_name=$2
+ local child_path=$3
+
+ local parent_ppath="$parent_path/$parent_pointer_name"
+
+ # Verify parent exists
+ if [ ! -d $SCRATCH_MNT/$parent_path ]; then
+ _fail "$SCRATCH_MNT/$parent_path not found"
+ else
+ echo "*** $parent_path OK"
+ fi
+
+ # Verify child exists
+ if [ ! -f $SCRATCH_MNT/$child_path ]; then
+ _fail "$SCRATCH_MNT/$child_path not found"
+ else
+ echo "*** $child_path OK"
+ fi
+
+ # Verify the parent pointer name exists as a child of the parent
+ if [ ! -f $SCRATCH_MNT/$parent_ppath ]; then
+ _fail "$SCRATCH_MNT/$parent_ppath not found"
+ else
+ echo "*** $parent_ppath OK"
+ fi
+
+ # Get the inodes of both parent and child
+ pino="$(stat -c '%i' $SCRATCH_MNT/$parent_path)"
+ cino="$(stat -c '%i' $SCRATCH_MNT/$child_path)"
+
+ # Get all the parent pointers of the child
+ parents=($($XFS_IO_PROG -x -c \
+ "parent -f -i $pino -n $parent_pointer_name" $SCRATCH_MNT/$child_path))
+ if [[ $? != 0 ]]; then
+ _fail "No parent pointers found for $child_path"
+ fi
+
+ # Parse parent pointer output.
+ # This sets PPINO PPGEN PPNAME PPNAME_LEN
+ _parse_parent_pointer $parents $pino $parent_pointer_name
+
+ # If we didnt find one, bail out
+ if [ $? -ne 0 ]; then
+ _fail "No parent pointer record found for $parent_path"\
+ "in $child_path"
+ fi
+
+ # Verify the inode generated by the parent pointer name is
+ # the same as the child inode
+ pppino="$(stat -c '%i' $SCRATCH_MNT/$parent_ppath)"
+ if [ $cino -ne $pppino ]
+ then
+ _fail "Bad parent pointer name value for $child_path."\
+ "$SCRATCH_MNT/$parent_ppath belongs to inode $PPPINO,"\
+ "but should be $cino"
+ fi
+
+ echo "*** Verified parent pointer:"\
+ "name:$PPNAME, namelen:$PPNAME_LEN"
+ echo "*** Parent pointer OK for child $child_path"
+}
+
+#
+# _verify_parent parent_pointer_name pino child_path
+#
+# Verify that the given child path contains no parent pointer entry
+# for the given inode and file name
+#
+_verify_no_parent()
+{
+ local parent_pname=$1
+ local pino=$2
+ local child_path=$3
+
+ # Verify child exists
+ if [ ! -f $SCRATCH_MNT/$child_path ]; then
+ _fail "$SCRATCH_MNT/$child_path not found"
+ else
+ echo "*** $child_path OK"
+ fi
+
+ # Get all the parent pointers of the child
+ local parents=($($XFS_IO_PROG -x -c \
+ "parent -f -i $pino -n $parent_pname" $SCRATCH_MNT/$child_path))
+ if [[ $? != 0 ]]; then
+ return 0
+ fi
+
+ # Parse parent pointer output.
+ # This sets PPINO PPGEN PPNAME PPNAME_LEN
+ _parse_parent_pointer $parents $pino $parent_pname
+
+ # If we didnt find one, return sucess
+ if [ $? -ne 0 ]; then
+ return 0
+ fi
+
+ _fail "Parent pointer entry found where none should:"\
+ "inode:$PPINO, gen:$PPGEN,"
+ "name:$PPNAME, namelen:$PPNAME_LEN"
+}
diff --git a/common/rc b/common/rc
index a25cbcd0..91b70a76 100644
--- a/common/rc
+++ b/common/rc
@@ -2539,6 +2539,9 @@ _require_xfs_io_command()
echo $testio | grep -q "invalid option" && \
_notrun "xfs_io $command support is missing"
;;
+ "parent")
+ testio=`$XFS_IO_PROG -x -c "parent" $TEST_DIR 2>&1`
+ ;;
"pwrite")
# -N (RWF_NOWAIT) only works with direct vectored I/O writes
local pwrite_opts=" "
diff --git a/common/xfs b/common/xfs
index ae81b3fe..7fd7cc7a 100644
--- a/common/xfs
+++ b/common/xfs
@@ -1399,3 +1399,15 @@ _xfs_filter_mkfs()
print STDOUT "realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX\n";
}'
}
+
+# this test requires the xfs parent pointers feature
+#
+_require_xfs_parent()
+{
+ _scratch_mkfs_xfs_supported -n parent > /dev/null 2>&1 \
+ || _notrun "mkfs.xfs does not support parent pointers"
+ _scratch_mkfs_xfs -n parent > /dev/null 2>&1
+ _try_scratch_mount >/dev/null 2>&1 \
+ || _notrun "kernel does not support parent pointers"
+ _scratch_unmount
+}
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/4] xfs: add parent pointer test
2022-10-12 1:38 [PATCH v2 0/4] xfstests: add parent pointer tests Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 1/4] common: add helpers for " Catherine Hoang
@ 2022-10-12 1:38 ` Catherine Hoang
2022-10-12 3:02 ` Zorro Lang
2022-10-12 1:38 ` [PATCH v2 3/4] xfs: add multi link " Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 4/4] xfs: add parent pointer inject test Catherine Hoang
3 siblings, 1 reply; 10+ messages in thread
From: Catherine Hoang @ 2022-10-12 1:38 UTC (permalink / raw)
To: linux-xfs, fstests
From: Allison Henderson <allison.henderson@oracle.com>
Add a test to verify basic parent pointers operations (create, move, link,
unlink, rename, overwrite).
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
doc/group-names.txt | 1 +
tests/xfs/554 | 125 ++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/554.out | 59 +++++++++++++++++++++
3 files changed, 185 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
new file mode 100755
index 00000000..26914e4c
--- /dev/null
+++ b/tests/xfs/554
@@ -0,0 +1,125 @@
+#! /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
+
+cleanup()
+{
+ cd /
+ rm -f $tmp.*
+}
+
+full()
+{
+ echo "" >>$seqres.full
+ echo "*** $* ***" >>$seqres.full
+ echo "" >>$seqres.full
+}
+
+# get standard environment, filters and checks
+. ./common/filter
+. ./common/reflink
+. ./common/inject
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_sysfs debug/larp
+_require_xfs_io_error_injection "larp"
+_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
+
+if [ $? -ne 0 ]
+then
+ _fail "failed to create test protofile"
+fi
+
+_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"
+
+testfolder1="testfolder1"
+testfolder2="testfolder2"
+file1="file1"
+file2="file2"
+file3="file3"
+file4="file4"
+file5="file5"
+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
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 3/4] xfs: add multi link parent pointer test
2022-10-12 1:38 [PATCH v2 0/4] xfstests: add parent pointer tests Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 1/4] common: add helpers for " Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 2/4] xfs: add parent pointer test Catherine Hoang
@ 2022-10-12 1:38 ` Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 4/4] xfs: add parent pointer inject test Catherine Hoang
3 siblings, 0 replies; 10+ messages in thread
From: Catherine Hoang @ 2022-10-12 1:38 UTC (permalink / raw)
To: linux-xfs, fstests
From: Allison Henderson <allison.henderson@oracle.com>
Add a test to verify parent pointers while multiple links to a file are
created and removed.
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
tests/xfs/555 | 96 +++++
tests/xfs/555.out | 1002 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 1098 insertions(+)
create mode 100755 tests/xfs/555
create mode 100644 tests/xfs/555.out
diff --git a/tests/xfs/555 b/tests/xfs/555
new file mode 100755
index 00000000..36d286f8
--- /dev/null
+++ b/tests/xfs/555
@@ -0,0 +1,96 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates. All Rights Reserved.
+#
+# FS QA Test 555
+#
+# multi link parent pointer test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+cleanup()
+{
+ cd /
+ rm -f $tmp.*
+}
+
+full()
+{
+ echo "" >>$seqres.full
+ echo "*** $* ***" >>$seqres.full
+ echo "" >>$seqres.full
+}
+
+# get standard environment, filters and checks
+. ./common/filter
+. ./common/reflink
+. ./common/inject
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_io_error_injection "larp"
+_require_xfs_sysfs debug/larp
+_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
+: done
+$
+EOF
+
+if [ $? -ne 0 ]
+then
+ _fail "failed to create test protofile"
+fi
+
+_scratch_mkfs -f -n parent=1 -p $protofile >>$seqresres.full 2>&1 \
+ || _fail "mkfs failed"
+_check_scratch_fs
+
+_scratch_mount >>$seqres.full 2>&1 \
+ || _fail "mount failed"
+
+testfolder1="testfolder1"
+testfolder2="testfolder2"
+file1="file1"
+file2="file2"
+file3="file3"
+file4="file4"
+file5="file5"
+file1_ln="file1_link"
+
+echo ""
+# Multi link parent pointer test
+NLINKS=100
+for (( j=0; j<$NLINKS; j++ )); do
+ ln $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln.$j
+ _verify_parent "$testfolder1" "$file1_ln.$j" "$testfolder1/$file1"
+ _verify_parent "$testfolder1" "$file1" "$testfolder1/$file1_ln.$j"
+done
+# Multi unlink parent pointer test
+for (( j=$NLINKS-1; j<=0; j-- )); do
+ ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln.$j)"
+ rm $SCRATCH_MNT/$testfolder1/$file1_ln.$j
+ _verify_no_parent "$file1_ln.$j" "$ino" "$testfolder1/$file1"
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/555.out b/tests/xfs/555.out
new file mode 100644
index 00000000..eb63ff3a
--- /dev/null
+++ b/tests/xfs/555.out
@@ -0,0 +1,1002 @@
+QA output created by 555
+
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.0 OK
+*** Verified parent pointer: name:file1_link.0, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.0 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.0
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.1 OK
+*** Verified parent pointer: name:file1_link.1, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.1 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.1
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.2 OK
+*** Verified parent pointer: name:file1_link.2, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.2 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.2
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.3 OK
+*** Verified parent pointer: name:file1_link.3, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.3 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.3
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.4 OK
+*** Verified parent pointer: name:file1_link.4, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.4 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.4
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.5 OK
+*** Verified parent pointer: name:file1_link.5, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.5 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.5
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.6 OK
+*** Verified parent pointer: name:file1_link.6, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.6 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.6
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.7 OK
+*** Verified parent pointer: name:file1_link.7, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.7 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.7
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.8 OK
+*** Verified parent pointer: name:file1_link.8, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.8 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.8
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.9 OK
+*** Verified parent pointer: name:file1_link.9, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.9 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.9
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.10 OK
+*** Verified parent pointer: name:file1_link.10, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.10 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.10
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.11 OK
+*** Verified parent pointer: name:file1_link.11, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.11 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.11
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.12 OK
+*** Verified parent pointer: name:file1_link.12, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.12 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.12
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.13 OK
+*** Verified parent pointer: name:file1_link.13, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.13 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.13
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.14 OK
+*** Verified parent pointer: name:file1_link.14, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.14 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.14
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.15 OK
+*** Verified parent pointer: name:file1_link.15, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.15 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.15
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.16 OK
+*** Verified parent pointer: name:file1_link.16, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.16 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.16
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.17 OK
+*** Verified parent pointer: name:file1_link.17, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.17 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.17
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.18 OK
+*** Verified parent pointer: name:file1_link.18, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.18 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.18
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.19 OK
+*** Verified parent pointer: name:file1_link.19, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.19 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.19
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.20 OK
+*** Verified parent pointer: name:file1_link.20, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.20 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.20
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.21 OK
+*** Verified parent pointer: name:file1_link.21, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.21 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.21
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.22 OK
+*** Verified parent pointer: name:file1_link.22, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.22 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.22
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.23 OK
+*** Verified parent pointer: name:file1_link.23, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.23 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.23
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.24 OK
+*** Verified parent pointer: name:file1_link.24, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.24 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.24
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.25 OK
+*** Verified parent pointer: name:file1_link.25, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.25 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.25
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.26 OK
+*** Verified parent pointer: name:file1_link.26, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.26 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.26
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.27 OK
+*** Verified parent pointer: name:file1_link.27, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.27 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.27
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.28 OK
+*** Verified parent pointer: name:file1_link.28, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.28 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.28
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.29 OK
+*** Verified parent pointer: name:file1_link.29, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.29 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.29
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.30 OK
+*** Verified parent pointer: name:file1_link.30, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.30 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.30
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.31 OK
+*** Verified parent pointer: name:file1_link.31, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.31 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.31
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.32 OK
+*** Verified parent pointer: name:file1_link.32, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.32 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.32
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.33 OK
+*** Verified parent pointer: name:file1_link.33, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.33 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.33
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.34 OK
+*** Verified parent pointer: name:file1_link.34, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.34 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.34
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.35 OK
+*** Verified parent pointer: name:file1_link.35, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.35 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.35
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.36 OK
+*** Verified parent pointer: name:file1_link.36, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.36 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.36
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.37 OK
+*** Verified parent pointer: name:file1_link.37, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.37 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.37
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.38 OK
+*** Verified parent pointer: name:file1_link.38, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.38 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.38
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.39 OK
+*** Verified parent pointer: name:file1_link.39, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.39 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.39
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.40 OK
+*** Verified parent pointer: name:file1_link.40, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.40 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.40
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.41 OK
+*** Verified parent pointer: name:file1_link.41, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.41 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.41
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.42 OK
+*** Verified parent pointer: name:file1_link.42, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.42 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.42
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.43 OK
+*** Verified parent pointer: name:file1_link.43, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.43 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.43
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.44 OK
+*** Verified parent pointer: name:file1_link.44, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.44 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.44
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.45 OK
+*** Verified parent pointer: name:file1_link.45, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.45 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.45
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.46 OK
+*** Verified parent pointer: name:file1_link.46, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.46 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.46
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.47 OK
+*** Verified parent pointer: name:file1_link.47, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.47 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.47
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.48 OK
+*** Verified parent pointer: name:file1_link.48, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.48 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.48
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.49 OK
+*** Verified parent pointer: name:file1_link.49, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.49 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.49
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.50 OK
+*** Verified parent pointer: name:file1_link.50, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.50 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.50
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.51 OK
+*** Verified parent pointer: name:file1_link.51, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.51 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.51
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.52 OK
+*** Verified parent pointer: name:file1_link.52, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.52 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.52
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.53 OK
+*** Verified parent pointer: name:file1_link.53, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.53 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.53
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.54 OK
+*** Verified parent pointer: name:file1_link.54, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.54 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.54
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.55 OK
+*** Verified parent pointer: name:file1_link.55, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.55 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.55
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.56 OK
+*** Verified parent pointer: name:file1_link.56, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.56 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.56
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.57 OK
+*** Verified parent pointer: name:file1_link.57, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.57 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.57
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.58 OK
+*** Verified parent pointer: name:file1_link.58, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.58 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.58
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.59 OK
+*** Verified parent pointer: name:file1_link.59, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.59 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.59
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.60 OK
+*** Verified parent pointer: name:file1_link.60, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.60 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.60
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.61 OK
+*** Verified parent pointer: name:file1_link.61, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.61 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.61
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.62 OK
+*** Verified parent pointer: name:file1_link.62, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.62 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.62
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.63 OK
+*** Verified parent pointer: name:file1_link.63, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.63 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.63
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.64 OK
+*** Verified parent pointer: name:file1_link.64, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.64 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.64
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.65 OK
+*** Verified parent pointer: name:file1_link.65, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.65 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.65
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.66 OK
+*** Verified parent pointer: name:file1_link.66, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.66 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.66
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.67 OK
+*** Verified parent pointer: name:file1_link.67, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.67 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.67
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.68 OK
+*** Verified parent pointer: name:file1_link.68, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.68 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.68
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.69 OK
+*** Verified parent pointer: name:file1_link.69, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.69 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.69
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.70 OK
+*** Verified parent pointer: name:file1_link.70, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.70 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.70
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.71 OK
+*** Verified parent pointer: name:file1_link.71, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.71 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.71
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.72 OK
+*** Verified parent pointer: name:file1_link.72, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.72 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.72
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.73 OK
+*** Verified parent pointer: name:file1_link.73, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.73 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.73
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.74 OK
+*** Verified parent pointer: name:file1_link.74, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.74 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.74
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.75 OK
+*** Verified parent pointer: name:file1_link.75, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.75 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.75
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.76 OK
+*** Verified parent pointer: name:file1_link.76, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.76 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.76
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.77 OK
+*** Verified parent pointer: name:file1_link.77, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.77 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.77
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.78 OK
+*** Verified parent pointer: name:file1_link.78, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.78 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.78
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.79 OK
+*** Verified parent pointer: name:file1_link.79, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.79 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.79
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.80 OK
+*** Verified parent pointer: name:file1_link.80, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.80 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.80
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.81 OK
+*** Verified parent pointer: name:file1_link.81, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.81 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.81
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.82 OK
+*** Verified parent pointer: name:file1_link.82, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.82 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.82
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.83 OK
+*** Verified parent pointer: name:file1_link.83, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.83 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.83
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.84 OK
+*** Verified parent pointer: name:file1_link.84, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.84 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.84
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.85 OK
+*** Verified parent pointer: name:file1_link.85, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.85 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.85
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.86 OK
+*** Verified parent pointer: name:file1_link.86, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.86 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.86
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.87 OK
+*** Verified parent pointer: name:file1_link.87, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.87 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.87
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.88 OK
+*** Verified parent pointer: name:file1_link.88, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.88 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.88
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.89 OK
+*** Verified parent pointer: name:file1_link.89, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.89 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.89
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.90 OK
+*** Verified parent pointer: name:file1_link.90, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.90 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.90
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.91 OK
+*** Verified parent pointer: name:file1_link.91, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.91 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.91
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.92 OK
+*** Verified parent pointer: name:file1_link.92, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.92 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.92
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.93 OK
+*** Verified parent pointer: name:file1_link.93, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.93 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.93
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.94 OK
+*** Verified parent pointer: name:file1_link.94, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.94 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.94
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.95 OK
+*** Verified parent pointer: name:file1_link.95, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.95 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.95
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.96 OK
+*** Verified parent pointer: name:file1_link.96, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.96 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.96
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.97 OK
+*** Verified parent pointer: name:file1_link.97, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.97 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.97
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.98 OK
+*** Verified parent pointer: name:file1_link.98, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.98 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.98
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.99 OK
+*** Verified parent pointer: name:file1_link.99, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.99 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.99
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 4/4] xfs: add parent pointer inject test
2022-10-12 1:38 [PATCH v2 0/4] xfstests: add parent pointer tests Catherine Hoang
` (2 preceding siblings ...)
2022-10-12 1:38 ` [PATCH v2 3/4] xfs: add multi link " Catherine Hoang
@ 2022-10-12 1:38 ` Catherine Hoang
3 siblings, 0 replies; 10+ messages in thread
From: Catherine Hoang @ 2022-10-12 1:38 UTC (permalink / raw)
To: linux-xfs, fstests
From: Allison Henderson <allison.henderson@oracle.com>
Add a test to verify parent pointers after an error injection and log
replay.
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
tests/xfs/556 | 110 ++++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/556.out | 14 ++++++
2 files changed, 124 insertions(+)
create mode 100755 tests/xfs/556
create mode 100644 tests/xfs/556.out
diff --git a/tests/xfs/556 b/tests/xfs/556
new file mode 100755
index 00000000..47e55bd7
--- /dev/null
+++ b/tests/xfs/556
@@ -0,0 +1,110 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates. All Rights Reserved.
+#
+# FS QA Test 556
+#
+# parent pointer inject test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+cleanup()
+{
+ cd /
+ rm -f $tmp.*
+}
+
+full()
+{
+ echo "" >>$seqres.full
+ echo "*** $* ***" >>$seqres.full
+ echo "" >>$seqres.full
+}
+
+# get standard environment, filters and checks
+. ./common/filter
+. ./common/reflink
+. ./common/inject
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_sysfs debug/larp
+_require_xfs_io_error_injection "larp"
+_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
+
+if [ $? -ne 0 ]
+then
+ _fail "failed to create test protofile"
+fi
+
+_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"
+
+testfolder1="testfolder1"
+testfolder2="testfolder2"
+file1="file1"
+file2="file2"
+file3="file3"
+file4="file4"
+file5="file5"
+file1_ln="file1_link"
+
+echo ""
+
+# Create files
+touch $SCRATCH_MNT/$testfolder1/$file4
+_verify_parent "$testfolder1" "$file4" "$testfolder1/$file4"
+
+# Inject error
+_scratch_inject_error "larp"
+
+# Move files
+mv $SCRATCH_MNT/$testfolder1/$file4 $SCRATCH_MNT/$testfolder2/$file5 2>&1 \
+ | _filter_scratch
+
+# FS should be shut down, touch will fail
+touch $SCRATCH_MNT/$testfolder2/$file5 2>&1 | _filter_scratch
+
+# Remount to replay log
+_scratch_remount_dump_log >> $seqres.full
+
+# FS should be online, touch should succeed
+touch $SCRATCH_MNT/$testfolder2/$file5
+
+# Check files again
+_verify_parent "$testfolder2" "$file5" "$testfolder2/$file5"
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/556.out b/tests/xfs/556.out
new file mode 100644
index 00000000..812330ee
--- /dev/null
+++ b/tests/xfs/556.out
@@ -0,0 +1,14 @@
+QA output created by 556
+
+*** testfolder1 OK
+*** testfolder1/file4 OK
+*** testfolder1/file4 OK
+*** Verified parent pointer: name:file4, namelen:5
+*** Parent pointer OK for child testfolder1/file4
+mv: cannot stat 'SCRATCH_MNT/testfolder1/file4': Input/output error
+touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
+*** testfolder2 OK
+*** testfolder2/file5 OK
+*** testfolder2/file5 OK
+*** Verified parent pointer: name:file5, namelen:5
+*** Parent pointer OK for child testfolder2/file5
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/4] xfs: add parent pointer test
2022-10-12 1:38 ` [PATCH v2 2/4] xfs: add parent pointer test Catherine Hoang
@ 2022-10-12 3:02 ` Zorro Lang
2022-10-12 3:10 ` Zorro Lang
2022-10-13 19:07 ` Allison Henderson
0 siblings, 2 replies; 10+ messages in thread
From: Zorro Lang @ 2022-10-12 3:02 UTC (permalink / raw)
To: Catherine Hoang; +Cc: linux-xfs, fstests
On Tue, Oct 11, 2022 at 06:38:10PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
>
> Add a test to verify basic parent pointers operations (create, move, link,
> unlink, rename, overwrite).
>
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
> doc/group-names.txt | 1 +
> tests/xfs/554 | 125 ++++++++++++++++++++++++++++++++++++++++++++
> tests/xfs/554.out | 59 +++++++++++++++++++++
> 3 files changed, 185 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
> new file mode 100755
> index 00000000..26914e4c
> --- /dev/null
> +++ b/tests/xfs/554
> @@ -0,0 +1,125 @@
> +#! /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
> +
> +cleanup()
> +{
> + cd /
> + rm -f $tmp.*
> +}
This's same with common cleanup function, you can remove this function.
> +
> +full()
> +{
> + echo "" >>$seqres.full
> + echo "*** $* ***" >>$seqres.full
> + echo "" >>$seqres.full
> +}
What's this function for? I didn't see this function is called in this case.
Am I missing something?
> +
> +# get standard environment, filters and checks
> +. ./common/filter
> +. ./common/reflink
> +. ./common/inject
> +. ./common/parent
> +
> +# Modify as appropriate
> +_supported_fs xfs
> +_require_scratch
> +_require_xfs_sysfs debug/larp
> +_require_xfs_io_error_injection "larp"
> +_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
> +
> +if [ $? -ne 0 ]
> +then
> + _fail "failed to create test protofile"
> +fi
It just writes a general file, right? Is there any special reason might cause
write fail?
I think we don't need to check each step's return value. And if we fail to write
a file, bash helps to output error message to break golden image too.
Thanks,
Zorro
> +
> +_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"
> +
> +testfolder1="testfolder1"
> +testfolder2="testfolder2"
> +file1="file1"
> +file2="file2"
> +file3="file3"
> +file4="file4"
> +file5="file5"
> +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
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/4] xfs: add parent pointer test
2022-10-12 3:02 ` Zorro Lang
@ 2022-10-12 3:10 ` Zorro Lang
2022-10-13 19:55 ` Allison Henderson
2022-10-13 19:07 ` Allison Henderson
1 sibling, 1 reply; 10+ messages in thread
From: Zorro Lang @ 2022-10-12 3:10 UTC (permalink / raw)
To: Catherine Hoang; +Cc: linux-xfs, fstests
On Wed, Oct 12, 2022 at 11:02:20AM +0800, Zorro Lang wrote:
> On Tue, Oct 11, 2022 at 06:38:10PM -0700, Catherine Hoang wrote:
> > From: Allison Henderson <allison.henderson@oracle.com>
> >
> > Add a test to verify basic parent pointers operations (create, move, link,
> > unlink, rename, overwrite).
> >
> > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > ---
> > doc/group-names.txt | 1 +
> > tests/xfs/554 | 125 ++++++++++++++++++++++++++++++++++++++++++++
> > tests/xfs/554.out | 59 +++++++++++++++++++++
> > 3 files changed, 185 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
> > new file mode 100755
> > index 00000000..26914e4c
> > --- /dev/null
> > +++ b/tests/xfs/554
> > @@ -0,0 +1,125 @@
> > +#! /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
> > +
> > +cleanup()
> > +{
> > + cd /
> > + rm -f $tmp.*
> > +}
>
> This's same with common cleanup function, you can remove this function.
Same for patch 3 and 4.
>
> > +
> > +full()
> > +{
> > + echo "" >>$seqres.full
> > + echo "*** $* ***" >>$seqres.full
> > + echo "" >>$seqres.full
> > +}
>
> What's this function for? I didn't see this function is called in this case.
> Am I missing something?
Same question for patch 3 and 4.
>
> > +
> > +# get standard environment, filters and checks
> > +. ./common/filter
> > +. ./common/reflink
> > +. ./common/inject
> > +. ./common/parent
> > +
> > +# Modify as appropriate
> > +_supported_fs xfs
> > +_require_scratch
> > +_require_xfs_sysfs debug/larp
> > +_require_xfs_io_error_injection "larp"
And does this case really do error injection? I didn't find that. If not, please
remove this requirement and above common/inject. Same question for patch 4.
Thanks,
Zorro
> > +_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
> > +
> > +if [ $? -ne 0 ]
> > +then
> > + _fail "failed to create test protofile"
> > +fi
>
> It just writes a general file, right? Is there any special reason might cause
> write fail?
>
> I think we don't need to check each step's return value. And if we fail to write
> a file, bash helps to output error message to break golden image too.
>
> Thanks,
> Zorro
>
> > +
> > +_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"
> > +
> > +testfolder1="testfolder1"
> > +testfolder2="testfolder2"
> > +file1="file1"
> > +file2="file2"
> > +file3="file3"
> > +file4="file4"
> > +file5="file5"
> > +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
> >
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/4] xfs: add parent pointer test
2022-10-12 3:02 ` Zorro Lang
2022-10-12 3:10 ` Zorro Lang
@ 2022-10-13 19:07 ` Allison Henderson
1 sibling, 0 replies; 10+ messages in thread
From: Allison Henderson @ 2022-10-13 19:07 UTC (permalink / raw)
To: Catherine Hoang, zlang; +Cc: fstests, linux-xfs
On Wed, 2022-10-12 at 11:02 +0800, Zorro Lang wrote:
> On Tue, Oct 11, 2022 at 06:38:10PM -0700, Catherine Hoang wrote:
> > From: Allison Henderson <allison.henderson@oracle.com>
> >
> > Add a test to verify basic parent pointers operations (create,
> > move, link,
> > unlink, rename, overwrite).
> >
> > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > ---
> > doc/group-names.txt | 1 +
> > tests/xfs/554 | 125
> > ++++++++++++++++++++++++++++++++++++++++++++
> > tests/xfs/554.out | 59 +++++++++++++++++++++
> > 3 files changed, 185 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
> > new file mode 100755
> > index 00000000..26914e4c
> > --- /dev/null
> > +++ b/tests/xfs/554
> > @@ -0,0 +1,125 @@
> > +#! /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
> > +
> > +cleanup()
> > +{
> > + cd /
> > + rm -f $tmp.*
> > +}
>
> This's same with common cleanup function, you can remove this
> function.
Ok, these tests were initially written before these helpers were
hoisted into a common location, so it makes sense to clean them out
now.
>
> > +
> > +full()
> > +{
> > + echo "" >>$seqres.full
> > + echo "*** $* ***" >>$seqres.full
> > + echo "" >>$seqres.full
> > +}
>
> What's this function for? I didn't see this function is called in
> this case.
> Am I missing something?
I think it's another common helper that's over in common/log now. I
suspect it was just reminiscent of the test case I modeled this after
at the time. It should likely come out now too.
>
> > +
> > +# get standard environment, filters and checks
> > +. ./common/filter
> > +. ./common/reflink
> > +. ./common/inject
> > +. ./common/parent
> > +
> > +# Modify as appropriate
> > +_supported_fs xfs
> > +_require_scratch
> > +_require_xfs_sysfs debug/larp
> > +_require_xfs_io_error_injection "larp"
> > +_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
> > +
> > +if [ $? -ne 0 ]
> > +then
> > + _fail "failed to create test protofile"
> > +fi
>
> It just writes a general file, right? Is there any special reason
> might cause
> write fail?
>
> I think we don't need to check each step's return value. And if we
> fail to write
> a file, bash helps to output error message to break golden image too.
>
I think I had borrowed this from the protofile test case
(tests/xfs/019). But yes, if the file creation were to fail, I think
the mkfs command will just error out. It should be fine to take it out
if folks prefer. Thanks for the reviews!
Allison
> Thanks,
> Zorro
>
> > +
> > +_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"
> > +
> > +testfolder1="testfolder1"
> > +testfolder2="testfolder2"
> > +file1="file1"
> > +file2="file2"
> > +file3="file3"
> > +file4="file4"
> > +file5="file5"
> > +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
> >
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/4] xfs: add parent pointer test
2022-10-12 3:10 ` Zorro Lang
@ 2022-10-13 19:55 ` Allison Henderson
2022-10-14 1:24 ` Zorro Lang
0 siblings, 1 reply; 10+ messages in thread
From: Allison Henderson @ 2022-10-13 19:55 UTC (permalink / raw)
To: Catherine Hoang, zlang; +Cc: fstests, linux-xfs
On Wed, 2022-10-12 at 11:10 +0800, Zorro Lang wrote:
> On Wed, Oct 12, 2022 at 11:02:20AM +0800, Zorro Lang wrote:
> > On Tue, Oct 11, 2022 at 06:38:10PM -0700, Catherine Hoang wrote:
> > > From: Allison Henderson <allison.henderson@oracle.com>
> > >
> > > Add a test to verify basic parent pointers operations (create,
> > > move, link,
> > > unlink, rename, overwrite).
> > >
> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > > ---
> > > doc/group-names.txt | 1 +
> > > tests/xfs/554 | 125
> > > ++++++++++++++++++++++++++++++++++++++++++++
> > > tests/xfs/554.out | 59 +++++++++++++++++++++
> > > 3 files changed, 185 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
> > > new file mode 100755
> > > index 00000000..26914e4c
> > > --- /dev/null
> > > +++ b/tests/xfs/554
> > > @@ -0,0 +1,125 @@
> > > +#! /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
> > > +
> > > +cleanup()
> > > +{
> > > + cd /
> > > + rm -f $tmp.*
> > > +}
> >
> > This's same with common cleanup function, you can remove this
> > function.
>
> Same for patch 3 and 4.
>
> >
> > > +
> > > +full()
> > > +{
> > > + echo "" >>$seqres.full
> > > + echo "*** $* ***" >>$seqres.full
> > > + echo "" >>$seqres.full
> > > +}
> >
> > What's this function for? I didn't see this function is called in
> > this case.
> > Am I missing something?
>
> Same question for patch 3 and 4.
Think I answered these in the other patch review...
>
> >
> > > +
> > > +# get standard environment, filters and checks
> > > +. ./common/filter
> > > +. ./common/reflink
> > > +. ./common/inject
> > > +. ./common/parent
> > > +
> > > +# Modify as appropriate
> > > +_supported_fs xfs
> > > +_require_scratch
> > > +_require_xfs_sysfs debug/larp
> > > +_require_xfs_io_error_injection "larp"
>
> And does this case really do error injection? I didn't find that. If
> not, please
> remove this requirement and above common/inject.
I think at one point I had all these tests in one file and then later
separated them into multiple tests. So I think the requirements for
injects can be removed from patch 2 and 3
> Same question for patch 4.
Patch 4 does do injects, so the requirement should stay.
Allison
>
> Thanks,
> Zorro
>
> > > +_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
> > > +
> > > +if [ $? -ne 0 ]
> > > +then
> > > + _fail "failed to create test protofile"
> > > +fi
> >
> > It just writes a general file, right? Is there any special reason
> > might cause
> > write fail?
> >
> > I think we don't need to check each step's return value. And if we
> > fail to write
> > a file, bash helps to output error message to break golden image
> > too.
> >
> > Thanks,
> > Zorro
> >
> > > +
> > > +_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"
> > > +
> > > +testfolder1="testfolder1"
> > > +testfolder2="testfolder2"
> > > +file1="file1"
> > > +file2="file2"
> > > +file3="file3"
> > > +file4="file4"
> > > +file5="file5"
> > > +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
> > >
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/4] xfs: add parent pointer test
2022-10-13 19:55 ` Allison Henderson
@ 2022-10-14 1:24 ` Zorro Lang
0 siblings, 0 replies; 10+ messages in thread
From: Zorro Lang @ 2022-10-14 1:24 UTC (permalink / raw)
To: Allison Henderson; +Cc: Catherine Hoang, fstests, linux-xfs
On Thu, Oct 13, 2022 at 07:55:42PM +0000, Allison Henderson wrote:
> On Wed, 2022-10-12 at 11:10 +0800, Zorro Lang wrote:
> > On Wed, Oct 12, 2022 at 11:02:20AM +0800, Zorro Lang wrote:
> > > On Tue, Oct 11, 2022 at 06:38:10PM -0700, Catherine Hoang wrote:
> > > > From: Allison Henderson <allison.henderson@oracle.com>
> > > >
> > > > Add a test to verify basic parent pointers operations (create,
> > > > move, link,
> > > > unlink, rename, overwrite).
> > > >
> > > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > > > ---
> > > > doc/group-names.txt | 1 +
> > > > tests/xfs/554 | 125
> > > > ++++++++++++++++++++++++++++++++++++++++++++
> > > > tests/xfs/554.out | 59 +++++++++++++++++++++
> > > > 3 files changed, 185 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
> > > > new file mode 100755
> > > > index 00000000..26914e4c
> > > > --- /dev/null
> > > > +++ b/tests/xfs/554
> > > > @@ -0,0 +1,125 @@
> > > > +#! /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
> > > > +
> > > > +cleanup()
> > > > +{
> > > > + cd /
> > > > + rm -f $tmp.*
> > > > +}
> > >
> > > This's same with common cleanup function, you can remove this
> > > function.
> >
> > Same for patch 3 and 4.
> >
> > >
> > > > +
> > > > +full()
> > > > +{
> > > > + echo "" >>$seqres.full
> > > > + echo "*** $* ***" >>$seqres.full
> > > > + echo "" >>$seqres.full
> > > > +}
> > >
> > > What's this function for? I didn't see this function is called in
> > > this case.
> > > Am I missing something?
> >
> > Same question for patch 3 and 4.
> Think I answered these in the other patch review...
>
> >
> > >
> > > > +
> > > > +# get standard environment, filters and checks
> > > > +. ./common/filter
> > > > +. ./common/reflink
> > > > +. ./common/inject
> > > > +. ./common/parent
> > > > +
> > > > +# Modify as appropriate
> > > > +_supported_fs xfs
> > > > +_require_scratch
> > > > +_require_xfs_sysfs debug/larp
> > > > +_require_xfs_io_error_injection "larp"
> >
> > And does this case really do error injection? I didn't find that. If
> > not, please
> > remove this requirement and above common/inject.
> I think at one point I had all these tests in one file and then later
> separated them into multiple tests. So I think the requirements for
> injects can be removed from patch 2 and 3
Sure, yes, same for patch 3 not 4. I said wrong below:)
>
> > Same question for patch 4.
> Patch 4 does do injects, so the requirement should stay.
>
> Allison
>
> >
> > Thanks,
> > Zorro
> >
> > > > +_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
> > > > +
> > > > +if [ $? -ne 0 ]
> > > > +then
> > > > + _fail "failed to create test protofile"
> > > > +fi
> > >
> > > It just writes a general file, right? Is there any special reason
> > > might cause
> > > write fail?
> > >
> > > I think we don't need to check each step's return value. And if we
> > > fail to write
> > > a file, bash helps to output error message to break golden image
> > > too.
> > >
> > > Thanks,
> > > Zorro
> > >
> > > > +
> > > > +_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"
> > > > +
> > > > +testfolder1="testfolder1"
> > > > +testfolder2="testfolder2"
> > > > +file1="file1"
> > > > +file2="file2"
> > > > +file3="file3"
> > > > +file4="file4"
> > > > +file5="file5"
> > > > +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
> > > >
> >
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-10-14 1:24 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-12 1:38 [PATCH v2 0/4] xfstests: add parent pointer tests Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 1/4] common: add helpers for " Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 2/4] xfs: add parent pointer test Catherine Hoang
2022-10-12 3:02 ` Zorro Lang
2022-10-12 3:10 ` Zorro Lang
2022-10-13 19:55 ` Allison Henderson
2022-10-14 1:24 ` Zorro Lang
2022-10-13 19:07 ` Allison Henderson
2022-10-12 1:38 ` [PATCH v2 3/4] xfs: add multi link " Catherine Hoang
2022-10-12 1:38 ` [PATCH v2 4/4] xfs: add parent pointer inject test Catherine Hoang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).