All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/1] Parent pointers test v1
@ 2018-06-10  5:10 Allison Henderson
  2018-06-10  5:10 ` [PATCH v1 1/1] xfstests: Add parent pointer test Allison Henderson
  0 siblings, 1 reply; 20+ messages in thread
From: Allison Henderson @ 2018-06-10  5:10 UTC (permalink / raw)
  To: linux-xfs

Hi all,

This is the first revision of a new xfstest to exercise the parent
pointer code. The test cover basic parent pointer operations,
including link, unlink, rename, overwrite, hardlinks and
error inject.

As always, comments and feedback are appreciated.  Thank you!

Allison Henderson (1):
  xfstests: Add parent pointer test

 tests/xfs/448     |  423 +++++++++++++++++++++
 tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/group   |    1 +
 3 files changed, 1520 insertions(+)
 create mode 100755 tests/xfs/448
 create mode 100644 tests/xfs/448.out

-- 
2.7.4


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10  5:10 [PATCH v1 0/1] Parent pointers test v1 Allison Henderson
@ 2018-06-10  5:10 ` Allison Henderson
  2018-06-10  5:43   ` Amir Goldstein
  2018-06-11 17:25   ` Darrick J. Wong
  0 siblings, 2 replies; 20+ messages in thread
From: Allison Henderson @ 2018-06-10  5:10 UTC (permalink / raw)
  To: linux-xfs

This patch adds a test for basic parent pointer operations,
including link, unlink, rename, overwrite, hardlinks and
error inject.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
---
 tests/xfs/448     |  423 +++++++++++++++++++++
 tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/group   |    1 +
 3 files changed, 1520 insertions(+)

diff --git a/tests/xfs/448 b/tests/xfs/448
new file mode 100755
index 0000000..8353bdb
--- /dev/null
+++ b/tests/xfs/448
@@ -0,0 +1,423 @@
+#! /bin/bash
+# Test 448
+#
+# parent pointer tests
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+seqfull="$seqres.full"
+tatus=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+filter_dbval()
+{
+	awk '{ print $4 }'
+}
+
+_full()
+{
+    echo ""            >>$seqfull
+    echo "*** $* ***"  >>$seqfull
+    echo ""            >>$seqfull
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/reflink
+. ./common/inject
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# Modify as appropriate
+_supported_os Linux
+_supported_fs xfs
+_require_scratch
+_require_xfs_io_error_injection "delayed_attr"
+
+echo "Silence is golden."
+
+# real QA test starts here
+protofile=$tmp.proto
+tempfile=$tmp.file
+
+echo fish >$tempfile
+$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
+
+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
+
+#
+# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
+#
+# Given a list of parent pointers, find the record that matches
+# the given inode and filename
+#
+# outputs:
+# PPINO		: Parent pointer inode
+# PPGEN		: Parent pointer generation
+# PPNAME	: Parent pointer name
+# PPNAME_LEN	: Parent pointer name length
+#
+parse_parent_pointer()
+{
+	PARENTS=$1
+	PINO=$2
+	PARENT_POINTER_NAME=$3
+
+	PLEN=${#PARENTS[@]}
+	FOUND=0
+
+	# Find the entry that has the same inode as the parent
+	# and parse out the entry info
+	for (( i=0; i<${PLEN}; i++ )); do
+
+		#advance to the parent entry matching the parent inode
+		if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
+			continue
+		fi
+
+		PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
+
+		((i++))
+		PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
+
+		((i++))
+		PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
+
+		((i++))
+		PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
+
+		if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
+			continue
+		fi
+
+		break
+	done
+
+	# If exhausted the list, we didnt find anything
+	if [ $i -eq $PLEN ]; then
+		return 0
+	fi
+
+	# Verify the parent pointer name length is correct
+	if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
+	then
+		_fail "Bad parent pointer reclen for $CHILD_PATH"
+	fi
+
+	#return sucess
+	return 1
+
+}
+
+#
+# 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
+#
+# #hardlink example
+# mkdir testfolder1
+# mkdir testfolder2
+# touch testfolder1/file1
+# ln testfolder1/file1 testfolder2/file1_ln
+# verify_parent testfolder2 file1_ln testfolder1/file1
+#
+verify_parent()
+{
+
+	PARENT_PATH=$1
+	PARENT_POINTER_NAME=$2
+	CHILD_PATH=$3
+
+	CHILD_NAME=$(basename "$CHILD_PATH")
+	PPINO=0
+	PPGEN=0
+	PPNAME_LEN=0
+	PPNAME=""
+	IFS=$'\n'
+
+	# 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
+	PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
+
+	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 $SCRATCH_MNT/$CHILD_PATH))
+	if [[ $? != 0 ]]; then
+		 _fail "No parent pointers found for $CHILD_PATH"
+	fi
+
+	parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
+	FOUND=$?
+
+	# If we didnt find one, bail out
+	if [ $FOUND -eq 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:"\
+			"inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
+	echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
+}
+
+#
+# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
+#
+# Verify that the given child path contains no parent pointer entry
+# for the given parent path and parnet pointer name
+#
+verify_no_parent()
+{
+
+	PARENT_PATH=$1
+	PARENT_PNAME=$2
+	CHILD_PATH=$3
+	CHILD_NAME=$(basename "$CHILD_PATH")
+	PPINO=0
+	PPGEN=0
+	PPNAME_LEN=0
+	PPNAME=""
+	IFS=$'\n'
+
+	# Check if parent even exists
+	if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
+		return 0
+	fi
+
+
+	# Verify child exists
+	if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
+		_fail "$SCRATCH_MNT/$CHILD_PATH not found"
+	else
+		echo "*** $CHILD_PATH OK"
+	fi
+
+	# Get parent inode
+	PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
+
+	# Get all the parent pointers of the child
+	PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
+	if [[ $? != 0 ]]; then
+		return 0
+	fi
+
+	parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
+	FOUND=$?
+
+	# If we didnt find one, return sucess
+	if [ $FOUND -eq 0 ]; then
+		return 0
+	fi
+
+	_fail "Parent pointer entry found where none should:"\
+			"inode:$PPINO, gen:$PPGEN,"
+			"name:$PPNAME, namelen:$PPNAME_LEN"
+}
+
+verify_fs()
+{
+	echo "*** create FS"
+
+	rm -f $seqfull
+	_scratch_unmount >/dev/null 2>&1
+
+	_scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
+		|| _fail "mkfs failed"
+	echo "*** check FS"
+	_check_scratch_fs
+
+	echo "*** mount FS"
+	_full " mount"
+	_scratch_mount >>$seqfull 2>&1 \
+		|| _fail "mount failed"
+
+	TESTFOLDER1="testfolder1"
+	TESTFOLDER2="testfolder2"
+	FILE1="file1"
+	FILE2="file2"
+	FILE3="file3"
+	FILE4="file4"
+	FILE5="file5"
+	FILE1_LN="file1_link"
+
+	echo ""
+	echo "Create parent pointer test"
+	verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
+
+	echo ""
+	echo "Move parent pointer test"
+	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
+	verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
+
+	echo ""
+	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 ""
+	echo "Remove hard link parent pointer test"
+	rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
+	verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
+	verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
+
+	echo ""
+	echo "Rename parent pointer test"
+	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
+	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
+	verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
+
+	echo ""
+	echo "Over write parent pointer test"
+	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
+	verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
+	mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
+	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
+
+
+	echo ""
+	echo "Multi link parent pointer test"
+	NLINKS=100
+	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
+	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
+	echo "Multi unlink parent pointer test"
+	for (( j=$NLINKS-1; j<=0; j-- )); do
+		rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
+		verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
+	done
+
+
+	echo ""
+	echo "Error inject test"
+
+	echo "Create files"
+	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
+	verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
+
+	echo "Inject error"
+	_scratch_inject_error "delayed_attr"
+
+	echo "Move files"
+	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
+
+	echo "FS should be shut down, touch will fail"
+	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
+
+	echo "Remount to replay log"
+	_scratch_inject_logprint >> $seqres.full
+
+	echo "FS should be online, touch should succeed"
+	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
+
+	echo "Check files again"
+	verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
+
+	echo "*** unmount FS"
+	_full "umount"
+	_scratch_unmount >>$seqfull 2>&1 \
+		|| _fail "umount failed"
+
+}
+
+verify_fs
+
+echo "*** done"
+rm $seqfull
+status=0
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/448.out b/tests/xfs/448.out
new file mode 100644
index 0000000..ccb2d4e
--- /dev/null
+++ b/tests/xfs/448.out
@@ -0,0 +1,1096 @@
+QA output created by 448
+Silence is golden.
+Wrote 2048.00Kb (value 0x2c)
+*** create FS
+*** check FS
+*** mount FS
+
+Create parent pointer test
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+
+Move parent pointer test
+*** testfolder2 OK
+*** testfolder2/file1 OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: inode:33613312, name:file1, namelen:5
+*** Parent pointer OK for child testfolder2/file1 inode:16777345
+
+Hard link parent pointer test
+*** testfolder1 OK
+*** testfolder1/file1_link OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder1/file1_link inode:16777345
+*** testfolder1 OK
+*** testfolder2/file1 OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder2/file1 inode:16777345
+*** testfolder2 OK
+*** testfolder1/file1_link OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: inode:33613312, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link inode:16777345
+*** testfolder2 OK
+*** testfolder2/file1 OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: inode:33613312, name:file1, namelen:5
+*** Parent pointer OK for child testfolder2/file1 inode:16777345
+
+Remove hard link parent pointer test
+*** testfolder1 OK
+*** testfolder1/file1_link OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder1/file1_link inode:16777345
+*** testfolder1/file1_link OK
+
+Rename parent pointer test
+*** testfolder1 OK
+*** testfolder1/file2 OK
+*** testfolder1/file2 OK
+*** Verified parent pointer: inode:16777344, name:file2, namelen:5
+*** Parent pointer OK for child testfolder1/file2 inode:16777345
+*** testfolder1/file2 OK
+
+Over write parent pointer test
+*** testfolder2 OK
+*** testfolder2/file3 OK
+*** testfolder2/file3 OK
+*** Verified parent pointer: inode:33613312, name:file3, namelen:5
+*** Parent pointer OK for child testfolder2/file3 inode:33613314
+*** testfolder1 OK
+*** testfolder1/file2 OK
+*** testfolder1/file2 OK
+*** Verified parent pointer: inode:16777344, name:file2, namelen:5
+*** Parent pointer OK for child testfolder1/file2 inode:33613314
+
+Multi link parent pointer test
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.0 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.0 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.1 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.1 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.2 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.2 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.3 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.3 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.4 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.4 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.5 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.5 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.6 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.6 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.7 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.7 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.8 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.8 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.9 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.9 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.10 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.10 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.11 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.11 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.12 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.12 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.13 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.13 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.14 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.14 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.15 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.15 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.16 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.16 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.17 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.17 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.18 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.18 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.19 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.19 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.20 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.20 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.21 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.21 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.22 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.22 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.23 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.23 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.24 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.24 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.25 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.25 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.26 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.26 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.27 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.27 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.28 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.28 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.29 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.29 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.30 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.30 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.31 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.31 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.32 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.32 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.33 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.33 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.34 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.34 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.35 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.35 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.36 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.36 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.37 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.37 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.38 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.38 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.39 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.39 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.40 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.40 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.41 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.41 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.42 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.42 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.43 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.43 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.44 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.44 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.45 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.45 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.46 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.46 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.47 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.47 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.48 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.48 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.49 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.49 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.50 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.50 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.51 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.51 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.52 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.52 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.53 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.53 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.54 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.54 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.55 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.55 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.56 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.56 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.57 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.57 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.58 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.58 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.59 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.59 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.60 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.60 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.61 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.61 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.62 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.62 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.63 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.63 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.64 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.64 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.65 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.65 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.66 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.66 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.67 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.67 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.68 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.68 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.69 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.69 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.70 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.70 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.71 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.71 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.72 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.72 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.73 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.73 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.74 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.74 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.75 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.75 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.76 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.76 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.77 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.77 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.78 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.78 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.79 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.79 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.80 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.80 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.81 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.81 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.82 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.82 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.83 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.83 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.84 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.84 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.85 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.85 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.86 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.86 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.87 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.87 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.88 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.88 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.89 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.89 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.90 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.90 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.91 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.91 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.92 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.92 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.93 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.93 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.94 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.94 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.95 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.95 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.96 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.96 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.97 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.97 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.98 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.98 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.99 OK
+*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
+*** Parent pointer OK for child testfolder1/file1 inode:16777345
+*** testfolder1 OK
+*** testfolder1/file1_link.99 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: inode:16777344, name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
+Multi unlink parent pointer test
+
+Error inject test
+Create files
+*** testfolder1 OK
+*** testfolder1/file4 OK
+*** testfolder1/file4 OK
+*** Verified parent pointer: inode:16777344, name:file4, namelen:5
+*** Parent pointer OK for child testfolder1/file4 inode:16777346
+Inject error
+Move files
+mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
+FS should be shut down, touch will fail
+touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
+Remount to replay log
+FS should be online, touch should succeed
+Check files again
+*** testfolder2 OK
+*** testfolder2/file5 OK
+*** testfolder2/file5 OK
+*** Verified parent pointer: inode:33613312, name:file5, namelen:5
+*** Parent pointer OK for child testfolder2/file5 inode:16777346
+*** unmount FS
+*** done
diff --git a/tests/xfs/group b/tests/xfs/group
index 2319f58..fb74e82 100644
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -445,3 +445,4 @@
 445 auto quick filestreams
 446 auto quick
 447 auto mount
+448 auto
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10  5:10 ` [PATCH v1 1/1] xfstests: Add parent pointer test Allison Henderson
@ 2018-06-10  5:43   ` Amir Goldstein
  2018-06-10 11:15     ` Amir Goldstein
  2018-06-10 15:49     ` Allison Henderson
  2018-06-11 17:25   ` Darrick J. Wong
  1 sibling, 2 replies; 20+ messages in thread
From: Amir Goldstein @ 2018-06-10  5:43 UTC (permalink / raw)
  To: Allison Henderson; +Cc: linux-xfs

On Sun, Jun 10, 2018 at 8:10 AM, Allison Henderson
<allison.henderson@oracle.com> wrote:
> This patch adds a test for basic parent pointer operations,
> including link, unlink, rename, overwrite, hardlinks and
> error inject.
>
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>

Looks mostly good. some comments below.

> ---
>  tests/xfs/448     |  423 +++++++++++++++++++++
>  tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/group   |    1 +
>  3 files changed, 1520 insertions(+)
>
> diff --git a/tests/xfs/448 b/tests/xfs/448
> new file mode 100755
> index 0000000..8353bdb
> --- /dev/null
> +++ b/tests/xfs/448
> @@ -0,0 +1,423 @@
> +#! /bin/bash
> +# Test 448
> +#
> +# parent pointer tests
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#-----------------------------------------------------------------------
> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +seqfull="$seqres.full"
> +tatus=1        # failure is the default!

typo 'tutus'

> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +       cd /
> +       rm -f $tmp.*
> +}
> +
> +filter_dbval()
> +{
> +       awk '{ print $4 }'
> +}
> +
> +_full()
> +{
> +    echo ""            >>$seqfull
> +    echo "*** $* ***"  >>$seqfull
> +    echo ""            >>$seqfull
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +. ./common/reflink
> +. ./common/inject
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# Modify as appropriate
> +_supported_os Linux
> +_supported_fs xfs
> +_require_scratch
> +_require_xfs_io_error_injection "delayed_attr"
> +
> +echo "Silence is golden."

This is used it tests that don't emit any other output.
Please remove.

> +
> +# real QA test starts here
> +protofile=$tmp.proto
> +tempfile=$tmp.file
> +
> +echo fish >$tempfile
> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2

It this used? comment might help.

> +
> +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
> +

Please add a comment to explain what's the purpose of using
protofile in this test.


> +#
> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
> +#
> +# Given a list of parent pointers, find the record that matches
> +# the given inode and filename
> +#
> +# outputs:
> +# PPINO                : Parent pointer inode
> +# PPGEN                : Parent pointer generation
> +# PPNAME       : Parent pointer name
> +# PPNAME_LEN   : Parent pointer name length
> +#
> +parse_parent_pointer()
> +{
> +       PARENTS=$1
> +       PINO=$2
> +       PARENT_POINTER_NAME=$3
> +
> +       PLEN=${#PARENTS[@]}
> +       FOUND=0
> +
> +       # Find the entry that has the same inode as the parent
> +       # and parse out the entry info
> +       for (( i=0; i<${PLEN}; i++ )); do
> +
> +               #advance to the parent entry matching the parent inode
> +               if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
> +                       continue
> +               fi
> +
> +               PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +               ((i++))
> +               PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +               ((i++))
> +               PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +               ((i++))
> +               PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
> +
> +               if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
> +                       continue
> +               fi
> +
> +               break
> +       done
> +
> +       # If exhausted the list, we didnt find anything
> +       if [ $i -eq $PLEN ]; then
> +               return 0
> +       fi
> +
> +       # Verify the parent pointer name length is correct
> +       if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
> +       then
> +               _fail "Bad parent pointer reclen for $CHILD_PATH"
> +       fi
> +
> +       #return sucess
> +       return 1
> +
> +}
> +
> +#
> +# 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
> +#
> +# #hardlink example
> +# mkdir testfolder1
> +# mkdir testfolder2
> +# touch testfolder1/file1
> +# ln testfolder1/file1 testfolder2/file1_ln
> +# verify_parent testfolder2 file1_ln testfolder1/file1
> +#
> +verify_parent()
> +{
> +
> +       PARENT_PATH=$1
> +       PARENT_POINTER_NAME=$2
> +       CHILD_PATH=$3
> +
> +       CHILD_NAME=$(basename "$CHILD_PATH")
> +       PPINO=0
> +       PPGEN=0
> +       PPNAME_LEN=0
> +       PPNAME=""
> +       IFS=$'\n'
> +
> +       # 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
> +       PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
> +
> +       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 $SCRATCH_MNT/$CHILD_PATH))
> +       if [[ $? != 0 ]]; then
> +                _fail "No parent pointers found for $CHILD_PATH"
> +       fi
> +
> +       parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
> +       FOUND=$?
> +
> +       # If we didnt find one, bail out
> +       if [ $FOUND -eq 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:"\
> +                       "inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
> +       echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
> +}
> +
> +#
> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
> +#
> +# Verify that the given child path contains no parent pointer entry
> +# for the given parent path and parnet pointer name
> +#
> +verify_no_parent()
> +{
> +
> +       PARENT_PATH=$1
> +       PARENT_PNAME=$2
> +       CHILD_PATH=$3
> +       CHILD_NAME=$(basename "$CHILD_PATH")
> +       PPINO=0
> +       PPGEN=0
> +       PPNAME_LEN=0
> +       PPNAME=""
> +       IFS=$'\n'
> +
> +       # Check if parent even exists
> +       if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
> +               return 0
> +       fi
> +
> +
> +       # Verify child exists
> +       if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
> +               _fail "$SCRATCH_MNT/$CHILD_PATH not found"
> +       else
> +               echo "*** $CHILD_PATH OK"
> +       fi
> +
> +       # Get parent inode
> +       PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
> +
> +       # Get all the parent pointers of the child
> +       PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
> +       if [[ $? != 0 ]]; then
> +               return 0
> +       fi
> +
> +       parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
> +       FOUND=$?
> +
> +       # If we didnt find one, return sucess
> +       if [ $FOUND -eq 0 ]; then
> +               return 0
> +       fi
> +
> +       _fail "Parent pointer entry found where none should:"\
> +                       "inode:$PPINO, gen:$PPGEN,"
> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
> +}
> +
> +verify_fs()
> +{
> +       echo "*** create FS"
> +
> +       rm -f $seqfull
> +       _scratch_unmount >/dev/null 2>&1
> +
> +       _scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
> +               || _fail "mkfs failed"
> +       echo "*** check FS"
> +       _check_scratch_fs
> +
> +       echo "*** mount FS"
> +       _full " mount"
> +       _scratch_mount >>$seqfull 2>&1 \
> +               || _fail "mount failed"
> +
> +       TESTFOLDER1="testfolder1"
> +       TESTFOLDER2="testfolder2"
> +       FILE1="file1"
> +       FILE2="file2"
> +       FILE3="file3"
> +       FILE4="file4"
> +       FILE5="file5"
> +       FILE1_LN="file1_link"
> +
> +       echo ""
> +       echo "Create parent pointer test"
> +       verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
> +
> +       echo ""
> +       echo "Move parent pointer test"
> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> +       verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
> +
> +       echo ""
> +       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 ""
> +       echo "Remove hard link parent pointer test"
> +       rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> +       verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
> +       verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
> +
> +       echo ""
> +       echo "Rename parent pointer test"
> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> +       verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
> +
> +       echo ""
> +       echo "Over write parent pointer test"
> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
> +       verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
> +       mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> +
> +
> +       echo ""
> +       echo "Multi link parent pointer test"
> +       NLINKS=100
> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
> +       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
> +       echo "Multi unlink parent pointer test"
> +       for (( j=$NLINKS-1; j<=0; j-- )); do
> +               rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
> +               verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
> +       done
> +
> +
> +       echo ""
> +       echo "Error inject test"
> +
> +       echo "Create files"
> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
> +       verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
> +
> +       echo "Inject error"
> +       _scratch_inject_error "delayed_attr"
> +
> +       echo "Move files"
> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> +
> +       echo "FS should be shut down, touch will fail"
> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
> +
> +       echo "Remount to replay log"
> +       _scratch_inject_logprint >> $seqres.full
> +
> +       echo "FS should be online, touch should succeed"
> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> +
> +       echo "Check files again"
> +       verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
> +
> +       echo "*** unmount FS"
> +       _full "umount"
> +       _scratch_unmount >>$seqfull 2>&1 \
> +               || _fail "umount failed"
> +
> +}
> +
> +verify_fs
> +
> +echo "*** done"
> +rm $seqfull
> +status=0
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
> new file mode 100644
> index 0000000..ccb2d4e
> --- /dev/null
> +++ b/tests/xfs/448.out
> @@ -0,0 +1,1096 @@
> +QA output created by 448
> +Silence is golden.
> +Wrote 2048.00Kb (value 0x2c)
> +*** create FS
> +*** check FS
> +*** mount FS
> +
> +Create parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +
> +Move parent pointer test
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +
> +Hard link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder1 OK
> +*** testfolder2/file1 OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +*** testfolder2 OK
> +*** testfolder1/file1_link OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +
> +Remove hard link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder1/file1_link OK
> +
> +Rename parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
> +*** testfolder1/file2 OK
> +
> +Over write parent pointer test
> +*** testfolder2 OK
> +*** testfolder2/file3 OK
> +*** testfolder2/file3 OK
> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
> +
> +Multi link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.0 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.0 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.1 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.2 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.2 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.3 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.3 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.4 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.4 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.5 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.5 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.6 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.6 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.7 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.7 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.8 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.8 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.9 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.9 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.10 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.10 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.11 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.11 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.12 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.12 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.13 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.13 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.14 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.14 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.15 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.15 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.16 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.16 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.17 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.17 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.18 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.18 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.19 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.19 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.20 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.20 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.21 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.21 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.22 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.22 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.23 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.23 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.24 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.24 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.25 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.25 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.26 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.26 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.27 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.27 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.28 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.28 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.29 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.29 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.30 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.30 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.31 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.31 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.32 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.32 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.33 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.33 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.34 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.34 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.35 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.35 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.36 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.36 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.37 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.37 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.38 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.38 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.39 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.39 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.40 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.40 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.41 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.41 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.42 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.42 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.43 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.43 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.44 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.44 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.45 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.45 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.46 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.46 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.47 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.47 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.48 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.48 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.49 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.49 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.50 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.50 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.51 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.51 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.52 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.52 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.53 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.53 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.54 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.54 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.55 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.55 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.56 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.56 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.57 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.57 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.58 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.58 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.59 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.59 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.60 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.60 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.61 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.61 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.62 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.62 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.63 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.63 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.64 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.64 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.65 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.65 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.66 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.66 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.67 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.67 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.68 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.68 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.69 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.69 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.70 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.70 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.71 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.71 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.72 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.72 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.73 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.73 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.74 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.74 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.75 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.75 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.76 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.76 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.77 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.77 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.78 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.78 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.79 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.79 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.80 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.80 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.81 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.81 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.82 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.82 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.83 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.83 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.84 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.84 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.85 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.85 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.86 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.86 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.87 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.87 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.88 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.88 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.89 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.89 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.90 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.90 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.91 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.91 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.92 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.92 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.93 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.93 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.94 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.94 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.95 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.95 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.96 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.96 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.97 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.97 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.98 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.98 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.99 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.99 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
> +Multi unlink parent pointer test
> +
> +Error inject test
> +Create files
> +*** testfolder1 OK
> +*** testfolder1/file4 OK
> +*** testfolder1/file4 OK
> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
> +Inject error
> +Move files
> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
> +FS should be shut down, touch will fail
> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
> +Remount to replay log
> +FS should be online, touch should succeed
> +Check files again
> +*** testfolder2 OK
> +*** testfolder2/file5 OK
> +*** testfolder2/file5 OK
> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
> +*** unmount FS
> +*** done
> diff --git a/tests/xfs/group b/tests/xfs/group
> index 2319f58..fb74e82 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -445,3 +445,4 @@
>  445 auto quick filestreams
>  446 auto quick
>  447 auto mount
> +448 auto
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10  5:43   ` Amir Goldstein
@ 2018-06-10 11:15     ` Amir Goldstein
  2018-06-10 18:54       ` Allison Henderson
  2018-06-10 15:49     ` Allison Henderson
  1 sibling, 1 reply; 20+ messages in thread
From: Amir Goldstein @ 2018-06-10 11:15 UTC (permalink / raw)
  To: Allison Henderson; +Cc: linux-xfs

On Sun, Jun 10, 2018 at 8:43 AM, Amir Goldstein <amir73il@gmail.com> wrote:
> On Sun, Jun 10, 2018 at 8:10 AM, Allison Henderson
> <allison.henderson@oracle.com> wrote:
>> This patch adds a test for basic parent pointer operations,
>> including link, unlink, rename, overwrite, hardlinks and
>> error inject.
>>
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>
> Looks mostly good. some comments below.

2 more..

>
>> ---
>>  tests/xfs/448     |  423 +++++++++++++++++++++
>>  tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/xfs/group   |    1 +
>>  3 files changed, 1520 insertions(+)
>>
>> diff --git a/tests/xfs/448 b/tests/xfs/448
>> new file mode 100755
>> index 0000000..8353bdb
>> --- /dev/null
>> +++ b/tests/xfs/448
>> @@ -0,0 +1,423 @@
>> +#! /bin/bash
>> +# Test 448
>> +#
>> +# parent pointer tests
>> +#
>> +#-----------------------------------------------------------------------
>> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>> +#-----------------------------------------------------------------------
>> +#
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +seqfull="$seqres.full"
>> +tatus=1        # failure is the default!
>
> typo 'tutus'
>
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +_cleanup()
>> +{
>> +       cd /
>> +       rm -f $tmp.*
>> +}
>> +
>> +filter_dbval()
>> +{
>> +       awk '{ print $4 }'
>> +}
>> +
>> +_full()
>> +{
>> +    echo ""            >>$seqfull
>> +    echo "*** $* ***"  >>$seqfull
>> +    echo ""            >>$seqfull
>> +}
>> +
>> +# get standard environment, filters and checks
>> +. ./common/rc
>> +. ./common/filter
>> +. ./common/reflink
>> +. ./common/inject
>> +
>> +# remove previous $seqres.full before test
>> +rm -f $seqres.full
>> +
>> +# Modify as appropriate
>> +_supported_os Linux
>> +_supported_fs xfs
>> +_require_scratch
>> +_require_xfs_io_error_injection "delayed_attr"

You need to implement and use
_require_xfs_io_command "parent"

>> +
>> +echo "Silence is golden."
>
> This is used it tests that don't emit any other output.
> Please remove.
>
>> +
>> +# real QA test starts here
>> +protofile=$tmp.proto
>> +tempfile=$tmp.file
>> +
>> +echo fish >$tempfile
>> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
>
> It this used? comment might help.
>
>> +
>> +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
>> +
>
> Please add a comment to explain what's the purpose of using
> protofile in this test.
>
>
>> +#
>> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
>> +#
>> +# Given a list of parent pointers, find the record that matches
>> +# the given inode and filename
>> +#
>> +# outputs:
>> +# PPINO                : Parent pointer inode
>> +# PPGEN                : Parent pointer generation
>> +# PPNAME       : Parent pointer name
>> +# PPNAME_LEN   : Parent pointer name length
>> +#
>> +parse_parent_pointer()
>> +{
>> +       PARENTS=$1
>> +       PINO=$2
>> +       PARENT_POINTER_NAME=$3
>> +
>> +       PLEN=${#PARENTS[@]}
>> +       FOUND=0
>> +
>> +       # Find the entry that has the same inode as the parent
>> +       # and parse out the entry info
>> +       for (( i=0; i<${PLEN}; i++ )); do
>> +
>> +               #advance to the parent entry matching the parent inode
>> +               if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
>> +                       continue
>> +               fi
>> +
>> +               PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
>> +
>> +               if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
>> +                       continue
>> +               fi
>> +
>> +               break
>> +       done
>> +
>> +       # If exhausted the list, we didnt find anything
>> +       if [ $i -eq $PLEN ]; then
>> +               return 0
>> +       fi
>> +
>> +       # Verify the parent pointer name length is correct
>> +       if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
>> +       then
>> +               _fail "Bad parent pointer reclen for $CHILD_PATH"
>> +       fi
>> +
>> +       #return sucess
>> +       return 1
>> +
>> +}
>> +
>> +#
>> +# 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
>> +#
>> +# #hardlink example
>> +# mkdir testfolder1
>> +# mkdir testfolder2
>> +# touch testfolder1/file1
>> +# ln testfolder1/file1 testfolder2/file1_ln
>> +# verify_parent testfolder2 file1_ln testfolder1/file1
>> +#
>> +verify_parent()
>> +{
>> +
>> +       PARENT_PATH=$1
>> +       PARENT_POINTER_NAME=$2
>> +       CHILD_PATH=$3
>> +
>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>> +       PPINO=0
>> +       PPGEN=0
>> +       PPNAME_LEN=0
>> +       PPNAME=""
>> +       IFS=$'\n'
>> +
>> +       # 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
>> +       PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
>> +
>> +       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 $SCRATCH_MNT/$CHILD_PATH))
>> +       if [[ $? != 0 ]]; then
>> +                _fail "No parent pointers found for $CHILD_PATH"
>> +       fi
>> +
>> +       parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
>> +       FOUND=$?
>> +
>> +       # If we didnt find one, bail out
>> +       if [ $FOUND -eq 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:"\
>> +                       "inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
>> +       echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
>> +}
>> +
>> +#
>> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
>> +#
>> +# Verify that the given child path contains no parent pointer entry
>> +# for the given parent path and parnet pointer name
>> +#
>> +verify_no_parent()
>> +{
>> +
>> +       PARENT_PATH=$1
>> +       PARENT_PNAME=$2
>> +       CHILD_PATH=$3
>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>> +       PPINO=0
>> +       PPGEN=0
>> +       PPNAME_LEN=0
>> +       PPNAME=""
>> +       IFS=$'\n'
>> +
>> +       # Check if parent even exists
>> +       if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
>> +               return 0
>> +       fi
>> +
>> +
>> +       # Verify child exists
>> +       if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
>> +               _fail "$SCRATCH_MNT/$CHILD_PATH not found"
>> +       else
>> +               echo "*** $CHILD_PATH OK"
>> +       fi
>> +
>> +       # Get parent inode
>> +       PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
>> +
>> +       # Get all the parent pointers of the child
>> +       PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
>> +       if [[ $? != 0 ]]; then
>> +               return 0
>> +       fi
>> +
>> +       parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
>> +       FOUND=$?
>> +
>> +       # If we didnt find one, return sucess
>> +       if [ $FOUND -eq 0 ]; then
>> +               return 0
>> +       fi
>> +
>> +       _fail "Parent pointer entry found where none should:"\
>> +                       "inode:$PPINO, gen:$PPGEN,"
>> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
>> +}
>> +
>> +verify_fs()
>> +{
>> +       echo "*** create FS"
>> +
>> +       rm -f $seqfull
>> +       _scratch_unmount >/dev/null 2>&1
>> +
>> +       _scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
>> +               || _fail "mkfs failed"
>> +       echo "*** check FS"
>> +       _check_scratch_fs
>> +
>> +       echo "*** mount FS"
>> +       _full " mount"
>> +       _scratch_mount >>$seqfull 2>&1 \
>> +               || _fail "mount failed"
>> +
>> +       TESTFOLDER1="testfolder1"
>> +       TESTFOLDER2="testfolder2"
>> +       FILE1="file1"
>> +       FILE2="file2"
>> +       FILE3="file3"
>> +       FILE4="file4"
>> +       FILE5="file5"
>> +       FILE1_LN="file1_link"
>> +
>> +       echo ""
>> +       echo "Create parent pointer test"
>> +       verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
>> +
>> +       echo ""
>> +       echo "Move parent pointer test"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +       verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
>> +
>> +       echo ""
>> +       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 ""
>> +       echo "Remove hard link parent pointer test"
>> +       rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +       verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
>> +       verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
>> +
>> +       echo ""
>> +       echo "Rename parent pointer test"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +       verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
>> +
>> +       echo ""
>> +       echo "Over write parent pointer test"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
>> +       verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
>> +       mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +
>> +
>> +       echo ""
>> +       echo "Multi link parent pointer test"
>> +       NLINKS=100
>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
>> +       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
>> +       echo "Multi unlink parent pointer test"
>> +       for (( j=$NLINKS-1; j<=0; j-- )); do
>> +               rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
>> +               verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
>> +       done
>> +
>> +
>> +       echo ""
>> +       echo "Error inject test"
>> +
>> +       echo "Create files"
>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
>> +       verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
>> +
>> +       echo "Inject error"
>> +       _scratch_inject_error "delayed_attr"
>> +
>> +       echo "Move files"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +       echo "FS should be shut down, touch will fail"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
>> +
>> +       echo "Remount to replay log"
>> +       _scratch_inject_logprint >> $seqres.full
>> +
>> +       echo "FS should be online, touch should succeed"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +       echo "Check files again"
>> +       verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
>> +
>> +       echo "*** unmount FS"
>> +       _full "umount"
>> +       _scratch_unmount >>$seqfull 2>&1 \
>> +               || _fail "umount failed"
>> +
>> +}
>> +
>> +verify_fs
>> +
>> +echo "*** done"
>> +rm $seqfull
>> +status=0
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
>> new file mode 100644
>> index 0000000..ccb2d4e
>> --- /dev/null
>> +++ b/tests/xfs/448.out
>> @@ -0,0 +1,1096 @@
>> +QA output created by 448
>> +Silence is golden.
>> +Wrote 2048.00Kb (value 0x2c)
>> +*** create FS
>> +*** check FS
>> +*** mount FS
>> +
>> +Create parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +
>> +Move parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Remove hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1/file1_link OK
>> +
>> +Rename parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
>> +*** testfolder1/file2 OK
>> +
>> +Over write parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file3 OK
>> +*** testfolder2/file3 OK
>> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
>> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
>> +
>> +Multi link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
>> +Multi unlink parent pointer test
>> +
>> +Error inject test
>> +Create files
>> +*** testfolder1 OK
>> +*** testfolder1/file4 OK
>> +*** testfolder1/file4 OK
>> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
>> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
>> +Inject error
>> +Move files
>> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
>> +FS should be shut down, touch will fail
>> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
>> +Remount to replay log
>> +FS should be online, touch should succeed
>> +Check files again
>> +*** testfolder2 OK
>> +*** testfolder2/file5 OK
>> +*** testfolder2/file5 OK
>> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
>> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
>> +*** unmount FS
>> +*** done
>> diff --git a/tests/xfs/group b/tests/xfs/group
>> index 2319f58..fb74e82 100644
>> --- a/tests/xfs/group
>> +++ b/tests/xfs/group
>> @@ -445,3 +445,4 @@
>>  445 auto quick filestreams
>>  446 auto quick
>>  447 auto mount
>> +448 auto

Isn't this test quick?

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10  5:43   ` Amir Goldstein
  2018-06-10 11:15     ` Amir Goldstein
@ 2018-06-10 15:49     ` Allison Henderson
  1 sibling, 0 replies; 20+ messages in thread
From: Allison Henderson @ 2018-06-10 15:49 UTC (permalink / raw)
  To: Amir Goldstein; +Cc: linux-xfs

On 06/09/2018 10:43 PM, Amir Goldstein wrote:
> On Sun, Jun 10, 2018 at 8:10 AM, Allison Henderson
> <allison.henderson@oracle.com> wrote:
>> This patch adds a test for basic parent pointer operations,
>> including link, unlink, rename, overwrite, hardlinks and
>> error inject.
>>
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> 
> Looks mostly good. some comments below.
> 
>> ---
>>   tests/xfs/448     |  423 +++++++++++++++++++++
>>   tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   tests/xfs/group   |    1 +
>>   3 files changed, 1520 insertions(+)
>>
>> diff --git a/tests/xfs/448 b/tests/xfs/448
>> new file mode 100755
>> index 0000000..8353bdb
>> --- /dev/null
>> +++ b/tests/xfs/448
>> @@ -0,0 +1,423 @@
>> +#! /bin/bash
>> +# Test 448
>> +#
>> +# parent pointer tests
>> +#
>> +#-----------------------------------------------------------------------
>> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>> +#-----------------------------------------------------------------------
>> +#
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +seqfull="$seqres.full"
>> +tatus=1        # failure is the default!
> 
> typo 'tutus'
> 
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +_cleanup()
>> +{
>> +       cd /
>> +       rm -f $tmp.*
>> +}
>> +
>> +filter_dbval()
>> +{
>> +       awk '{ print $4 }'
>> +}
>> +
>> +_full()
>> +{
>> +    echo ""            >>$seqfull
>> +    echo "*** $* ***"  >>$seqfull
>> +    echo ""            >>$seqfull
>> +}
>> +
>> +# get standard environment, filters and checks
>> +. ./common/rc
>> +. ./common/filter
>> +. ./common/reflink
>> +. ./common/inject
>> +
>> +# remove previous $seqres.full before test
>> +rm -f $seqres.full
>> +
>> +# Modify as appropriate
>> +_supported_os Linux
>> +_supported_fs xfs
>> +_require_scratch
>> +_require_xfs_io_error_injection "delayed_attr"
>> +
>> +echo "Silence is golden."
> 
> This is used it tests that don't emit any other output.
> Please remove.
> 
>> +
>> +# real QA test starts here
>> +protofile=$tmp.proto
>> +tempfile=$tmp.file
>> +
>> +echo fish >$tempfile
>> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
> 
> It this used? comment might help.
> 
I think it can come out.  I had used another test as a template and 
likely forgot to gut some things.  Will clean up.

>> +
>> +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
>> +
> 
> Please add a comment to explain what's the purpose of using
> protofile in this test.
> 
Oh, I think we had discussed using protofiles in the test case a really 
long time ago.  This is just the first push of it because I cant really 
have a successful diff until all the bugs are worked out :-)

The code that constructs the protofile is another disjoint set of code 
that creates inodes.  So like any such similar code path, the parent 
pointers need to get added in there too.  This is effectively exercising 
the code changes seen in patch 25 of the xfsprogs set.

I will add a comment though explaining that.  Thx!

Allison

> 
>> +#
>> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
>> +#
>> +# Given a list of parent pointers, find the record that matches
>> +# the given inode and filename
>> +#
>> +# outputs:
>> +# PPINO                : Parent pointer inode
>> +# PPGEN                : Parent pointer generation
>> +# PPNAME       : Parent pointer name
>> +# PPNAME_LEN   : Parent pointer name length
>> +#
>> +parse_parent_pointer()
>> +{
>> +       PARENTS=$1
>> +       PINO=$2
>> +       PARENT_POINTER_NAME=$3
>> +
>> +       PLEN=${#PARENTS[@]}
>> +       FOUND=0
>> +
>> +       # Find the entry that has the same inode as the parent
>> +       # and parse out the entry info
>> +       for (( i=0; i<${PLEN}; i++ )); do
>> +
>> +               #advance to the parent entry matching the parent inode
>> +               if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
>> +                       continue
>> +               fi
>> +
>> +               PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +               ((i++))
>> +               PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
>> +
>> +               if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
>> +                       continue
>> +               fi
>> +
>> +               break
>> +       done
>> +
>> +       # If exhausted the list, we didnt find anything
>> +       if [ $i -eq $PLEN ]; then
>> +               return 0
>> +       fi
>> +
>> +       # Verify the parent pointer name length is correct
>> +       if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
>> +       then
>> +               _fail "Bad parent pointer reclen for $CHILD_PATH"
>> +       fi
>> +
>> +       #return sucess
>> +       return 1
>> +
>> +}
>> +
>> +#
>> +# 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
>> +#
>> +# #hardlink example
>> +# mkdir testfolder1
>> +# mkdir testfolder2
>> +# touch testfolder1/file1
>> +# ln testfolder1/file1 testfolder2/file1_ln
>> +# verify_parent testfolder2 file1_ln testfolder1/file1
>> +#
>> +verify_parent()
>> +{
>> +
>> +       PARENT_PATH=$1
>> +       PARENT_POINTER_NAME=$2
>> +       CHILD_PATH=$3
>> +
>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>> +       PPINO=0
>> +       PPGEN=0
>> +       PPNAME_LEN=0
>> +       PPNAME=""
>> +       IFS=$'\n'
>> +
>> +       # 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
>> +       PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
>> +
>> +       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 $SCRATCH_MNT/$CHILD_PATH))
>> +       if [[ $? != 0 ]]; then
>> +                _fail "No parent pointers found for $CHILD_PATH"
>> +       fi
>> +
>> +       parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
>> +       FOUND=$?
>> +
>> +       # If we didnt find one, bail out
>> +       if [ $FOUND -eq 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:"\
>> +                       "inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
>> +       echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
>> +}
>> +
>> +#
>> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
>> +#
>> +# Verify that the given child path contains no parent pointer entry
>> +# for the given parent path and parnet pointer name
>> +#
>> +verify_no_parent()
>> +{
>> +
>> +       PARENT_PATH=$1
>> +       PARENT_PNAME=$2
>> +       CHILD_PATH=$3
>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>> +       PPINO=0
>> +       PPGEN=0
>> +       PPNAME_LEN=0
>> +       PPNAME=""
>> +       IFS=$'\n'
>> +
>> +       # Check if parent even exists
>> +       if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
>> +               return 0
>> +       fi
>> +
>> +
>> +       # Verify child exists
>> +       if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
>> +               _fail "$SCRATCH_MNT/$CHILD_PATH not found"
>> +       else
>> +               echo "*** $CHILD_PATH OK"
>> +       fi
>> +
>> +       # Get parent inode
>> +       PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
>> +
>> +       # Get all the parent pointers of the child
>> +       PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
>> +       if [[ $? != 0 ]]; then
>> +               return 0
>> +       fi
>> +
>> +       parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
>> +       FOUND=$?
>> +
>> +       # If we didnt find one, return sucess
>> +       if [ $FOUND -eq 0 ]; then
>> +               return 0
>> +       fi
>> +
>> +       _fail "Parent pointer entry found where none should:"\
>> +                       "inode:$PPINO, gen:$PPGEN,"
>> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
>> +}
>> +
>> +verify_fs()
>> +{
>> +       echo "*** create FS"
>> +
>> +       rm -f $seqfull
>> +       _scratch_unmount >/dev/null 2>&1
>> +
>> +       _scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
>> +               || _fail "mkfs failed"
>> +       echo "*** check FS"
>> +       _check_scratch_fs
>> +
>> +       echo "*** mount FS"
>> +       _full " mount"
>> +       _scratch_mount >>$seqfull 2>&1 \
>> +               || _fail "mount failed"
>> +
>> +       TESTFOLDER1="testfolder1"
>> +       TESTFOLDER2="testfolder2"
>> +       FILE1="file1"
>> +       FILE2="file2"
>> +       FILE3="file3"
>> +       FILE4="file4"
>> +       FILE5="file5"
>> +       FILE1_LN="file1_link"
>> +
>> +       echo ""
>> +       echo "Create parent pointer test"
>> +       verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
>> +
>> +       echo ""
>> +       echo "Move parent pointer test"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +       verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
>> +
>> +       echo ""
>> +       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 ""
>> +       echo "Remove hard link parent pointer test"
>> +       rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +       verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
>> +       verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
>> +
>> +       echo ""
>> +       echo "Rename parent pointer test"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +       verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
>> +
>> +       echo ""
>> +       echo "Over write parent pointer test"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
>> +       verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
>> +       mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +
>> +
>> +       echo ""
>> +       echo "Multi link parent pointer test"
>> +       NLINKS=100
>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
>> +       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
>> +       echo "Multi unlink parent pointer test"
>> +       for (( j=$NLINKS-1; j<=0; j-- )); do
>> +               rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
>> +               verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
>> +       done
>> +
>> +
>> +       echo ""
>> +       echo "Error inject test"
>> +
>> +       echo "Create files"
>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
>> +       verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
>> +
>> +       echo "Inject error"
>> +       _scratch_inject_error "delayed_attr"
>> +
>> +       echo "Move files"
>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +       echo "FS should be shut down, touch will fail"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
>> +
>> +       echo "Remount to replay log"
>> +       _scratch_inject_logprint >> $seqres.full
>> +
>> +       echo "FS should be online, touch should succeed"
>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +       echo "Check files again"
>> +       verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
>> +
>> +       echo "*** unmount FS"
>> +       _full "umount"
>> +       _scratch_unmount >>$seqfull 2>&1 \
>> +               || _fail "umount failed"
>> +
>> +}
>> +
>> +verify_fs
>> +
>> +echo "*** done"
>> +rm $seqfull
>> +status=0
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
>> new file mode 100644
>> index 0000000..ccb2d4e
>> --- /dev/null
>> +++ b/tests/xfs/448.out
>> @@ -0,0 +1,1096 @@
>> +QA output created by 448
>> +Silence is golden.
>> +Wrote 2048.00Kb (value 0x2c)
>> +*** create FS
>> +*** check FS
>> +*** mount FS
>> +
>> +Create parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +
>> +Move parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Remove hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1/file1_link OK
>> +
>> +Rename parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
>> +*** testfolder1/file2 OK
>> +
>> +Over write parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file3 OK
>> +*** testfolder2/file3 OK
>> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
>> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
>> +
>> +Multi link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
>> +Multi unlink parent pointer test
>> +
>> +Error inject test
>> +Create files
>> +*** testfolder1 OK
>> +*** testfolder1/file4 OK
>> +*** testfolder1/file4 OK
>> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
>> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
>> +Inject error
>> +Move files
>> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
>> +FS should be shut down, touch will fail
>> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
>> +Remount to replay log
>> +FS should be online, touch should succeed
>> +Check files again
>> +*** testfolder2 OK
>> +*** testfolder2/file5 OK
>> +*** testfolder2/file5 OK
>> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
>> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
>> +*** unmount FS
>> +*** done
>> diff --git a/tests/xfs/group b/tests/xfs/group
>> index 2319f58..fb74e82 100644
>> --- a/tests/xfs/group
>> +++ b/tests/xfs/group
>> @@ -445,3 +445,4 @@
>>   445 auto quick filestreams
>>   446 auto quick
>>   447 auto mount
>> +448 auto
>> --
>> 2.7.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=LHZQ8fHvy6wDKXGTWcm97burZH5sQKHRDMaY1UthQxc&m=lQnyCYm8hYYj20tY1ivJrKqnoSB8ude5mLbjcObhGtA&s=BZTxtne1OaVwTYtROG9Y1HNTpkUk_xKutxYFjuhlqIo&e=

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10 11:15     ` Amir Goldstein
@ 2018-06-10 18:54       ` Allison Henderson
  2018-06-11  5:48         ` Amir Goldstein
  0 siblings, 1 reply; 20+ messages in thread
From: Allison Henderson @ 2018-06-10 18:54 UTC (permalink / raw)
  To: Amir Goldstein; +Cc: linux-xfs

On 06/10/2018 04:15 AM, Amir Goldstein wrote:
> On Sun, Jun 10, 2018 at 8:43 AM, Amir Goldstein <amir73il@gmail.com> wrote:
>> On Sun, Jun 10, 2018 at 8:10 AM, Allison Henderson
>> <allison.henderson@oracle.com> wrote:
>>> This patch adds a test for basic parent pointer operations,
>>> including link, unlink, rename, overwrite, hardlinks and
>>> error inject.
>>>
>>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>>
>> Looks mostly good. some comments below.
> 
> 2 more..
> 
>>
>>> ---
>>>   tests/xfs/448     |  423 +++++++++++++++++++++
>>>   tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>   tests/xfs/group   |    1 +
>>>   3 files changed, 1520 insertions(+)
>>>
>>> diff --git a/tests/xfs/448 b/tests/xfs/448
>>> new file mode 100755
>>> index 0000000..8353bdb
>>> --- /dev/null
>>> +++ b/tests/xfs/448
>>> @@ -0,0 +1,423 @@
>>> +#! /bin/bash
>>> +# Test 448
>>> +#
>>> +# parent pointer tests
>>> +#
>>> +#-----------------------------------------------------------------------
>>> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
>>> +#
>>> +# This program is free software; you can redistribute it and/or
>>> +# modify it under the terms of the GNU General Public License as
>>> +# published by the Free Software Foundation.
>>> +#
>>> +# This program is distributed in the hope that it would be useful,
>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> +# GNU General Public License for more details.
>>> +#
>>> +# You should have received a copy of the GNU General Public License
>>> +# along with this program; if not, write the Free Software Foundation,
>>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>>> +#-----------------------------------------------------------------------
>>> +#
>>> +
>>> +seq=`basename $0`
>>> +seqres=$RESULT_DIR/$seq
>>> +echo "QA output created by $seq"
>>> +
>>> +here=`pwd`
>>> +tmp=/tmp/$$
>>> +seqfull="$seqres.full"
>>> +tatus=1        # failure is the default!
>>
>> typo 'tutus'
>>
>>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>>> +
>>> +_cleanup()
>>> +{
>>> +       cd /
>>> +       rm -f $tmp.*
>>> +}
>>> +
>>> +filter_dbval()
>>> +{
>>> +       awk '{ print $4 }'
>>> +}
>>> +
>>> +_full()
>>> +{
>>> +    echo ""            >>$seqfull
>>> +    echo "*** $* ***"  >>$seqfull
>>> +    echo ""            >>$seqfull
>>> +}
>>> +
>>> +# get standard environment, filters and checks
>>> +. ./common/rc
>>> +. ./common/filter
>>> +. ./common/reflink
>>> +. ./common/inject
>>> +
>>> +# remove previous $seqres.full before test
>>> +rm -f $seqres.full
>>> +
>>> +# Modify as appropriate
>>> +_supported_os Linux
>>> +_supported_fs xfs
>>> +_require_scratch
>>> +_require_xfs_io_error_injection "delayed_attr"
> 
> You need to implement and use
> _require_xfs_io_command "parent"

Alrighty, I will add that in.

> 
>>> +
>>> +echo "Silence is golden."
>>
>> This is used it tests that don't emit any other output.
>> Please remove.
>>
>>> +
>>> +# real QA test starts here
>>> +protofile=$tmp.proto
>>> +tempfile=$tmp.file
>>> +
>>> +echo fish >$tempfile
>>> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
>>
>> It this used? comment might help.
>>
>>> +
>>> +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
>>> +
>>
>> Please add a comment to explain what's the purpose of using
>> protofile in this test.
>>
>>
>>> +#
>>> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
>>> +#
>>> +# Given a list of parent pointers, find the record that matches
>>> +# the given inode and filename
>>> +#
>>> +# outputs:
>>> +# PPINO                : Parent pointer inode
>>> +# PPGEN                : Parent pointer generation
>>> +# PPNAME       : Parent pointer name
>>> +# PPNAME_LEN   : Parent pointer name length
>>> +#
>>> +parse_parent_pointer()
>>> +{
>>> +       PARENTS=$1
>>> +       PINO=$2
>>> +       PARENT_POINTER_NAME=$3
>>> +
>>> +       PLEN=${#PARENTS[@]}
>>> +       FOUND=0
>>> +
>>> +       # Find the entry that has the same inode as the parent
>>> +       # and parse out the entry info
>>> +       for (( i=0; i<${PLEN}; i++ )); do
>>> +
>>> +               #advance to the parent entry matching the parent inode
>>> +               if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
>>> +                       continue
>>> +               fi
>>> +
>>> +               PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>>> +
>>> +               ((i++))
>>> +               PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>>> +
>>> +               ((i++))
>>> +               PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>>> +
>>> +               ((i++))
>>> +               PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
>>> +
>>> +               if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
>>> +                       continue
>>> +               fi
>>> +
>>> +               break
>>> +       done
>>> +
>>> +       # If exhausted the list, we didnt find anything
>>> +       if [ $i -eq $PLEN ]; then
>>> +               return 0
>>> +       fi
>>> +
>>> +       # Verify the parent pointer name length is correct
>>> +       if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
>>> +       then
>>> +               _fail "Bad parent pointer reclen for $CHILD_PATH"
>>> +       fi
>>> +
>>> +       #return sucess
>>> +       return 1
>>> +
>>> +}
>>> +
>>> +#
>>> +# 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
>>> +#
>>> +# #hardlink example
>>> +# mkdir testfolder1
>>> +# mkdir testfolder2
>>> +# touch testfolder1/file1
>>> +# ln testfolder1/file1 testfolder2/file1_ln
>>> +# verify_parent testfolder2 file1_ln testfolder1/file1
>>> +#
>>> +verify_parent()
>>> +{
>>> +
>>> +       PARENT_PATH=$1
>>> +       PARENT_POINTER_NAME=$2
>>> +       CHILD_PATH=$3
>>> +
>>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>>> +       PPINO=0
>>> +       PPGEN=0
>>> +       PPNAME_LEN=0
>>> +       PPNAME=""
>>> +       IFS=$'\n'
>>> +
>>> +       # 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
>>> +       PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
>>> +
>>> +       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 $SCRATCH_MNT/$CHILD_PATH))
>>> +       if [[ $? != 0 ]]; then
>>> +                _fail "No parent pointers found for $CHILD_PATH"
>>> +       fi
>>> +
>>> +       parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
>>> +       FOUND=$?
>>> +
>>> +       # If we didnt find one, bail out
>>> +       if [ $FOUND -eq 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:"\
>>> +                       "inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
>>> +       echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
>>> +}
>>> +
>>> +#
>>> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
>>> +#
>>> +# Verify that the given child path contains no parent pointer entry
>>> +# for the given parent path and parnet pointer name
>>> +#
>>> +verify_no_parent()
>>> +{
>>> +
>>> +       PARENT_PATH=$1
>>> +       PARENT_PNAME=$2
>>> +       CHILD_PATH=$3
>>> +       CHILD_NAME=$(basename "$CHILD_PATH")
>>> +       PPINO=0
>>> +       PPGEN=0
>>> +       PPNAME_LEN=0
>>> +       PPNAME=""
>>> +       IFS=$'\n'
>>> +
>>> +       # Check if parent even exists
>>> +       if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
>>> +               return 0
>>> +       fi
>>> +
>>> +
>>> +       # Verify child exists
>>> +       if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
>>> +               _fail "$SCRATCH_MNT/$CHILD_PATH not found"
>>> +       else
>>> +               echo "*** $CHILD_PATH OK"
>>> +       fi
>>> +
>>> +       # Get parent inode
>>> +       PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
>>> +
>>> +       # Get all the parent pointers of the child
>>> +       PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
>>> +       if [[ $? != 0 ]]; then
>>> +               return 0
>>> +       fi
>>> +
>>> +       parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
>>> +       FOUND=$?
>>> +
>>> +       # If we didnt find one, return sucess
>>> +       if [ $FOUND -eq 0 ]; then
>>> +               return 0
>>> +       fi
>>> +
>>> +       _fail "Parent pointer entry found where none should:"\
>>> +                       "inode:$PPINO, gen:$PPGEN,"
>>> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
>>> +}
>>> +
>>> +verify_fs()
>>> +{
>>> +       echo "*** create FS"
>>> +
>>> +       rm -f $seqfull
>>> +       _scratch_unmount >/dev/null 2>&1
>>> +
>>> +       _scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
>>> +               || _fail "mkfs failed"
>>> +       echo "*** check FS"
>>> +       _check_scratch_fs
>>> +
>>> +       echo "*** mount FS"
>>> +       _full " mount"
>>> +       _scratch_mount >>$seqfull 2>&1 \
>>> +               || _fail "mount failed"
>>> +
>>> +       TESTFOLDER1="testfolder1"
>>> +       TESTFOLDER2="testfolder2"
>>> +       FILE1="file1"
>>> +       FILE2="file2"
>>> +       FILE3="file3"
>>> +       FILE4="file4"
>>> +       FILE5="file5"
>>> +       FILE1_LN="file1_link"
>>> +
>>> +       echo ""
>>> +       echo "Create parent pointer test"
>>> +       verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
>>> +
>>> +       echo ""
>>> +       echo "Move parent pointer test"
>>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>>> +       verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
>>> +
>>> +       echo ""
>>> +       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 ""
>>> +       echo "Remove hard link parent pointer test"
>>> +       rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>>> +       verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
>>> +       verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
>>> +
>>> +       echo ""
>>> +       echo "Rename parent pointer test"
>>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>>> +       verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
>>> +
>>> +       echo ""
>>> +       echo "Over write parent pointer test"
>>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
>>> +       verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
>>> +       mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>>> +       verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>>> +
>>> +
>>> +       echo ""
>>> +       echo "Multi link parent pointer test"
>>> +       NLINKS=100
>>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
>>> +       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
>>> +       echo "Multi unlink parent pointer test"
>>> +       for (( j=$NLINKS-1; j<=0; j-- )); do
>>> +               rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
>>> +               verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
>>> +       done
>>> +
>>> +
>>> +       echo ""
>>> +       echo "Error inject test"
>>> +
>>> +       echo "Create files"
>>> +       touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
>>> +       verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
>>> +
>>> +       echo "Inject error"
>>> +       _scratch_inject_error "delayed_attr"
>>> +
>>> +       echo "Move files"
>>> +       mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>>> +
>>> +       echo "FS should be shut down, touch will fail"
>>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
>>> +
>>> +       echo "Remount to replay log"
>>> +       _scratch_inject_logprint >> $seqres.full
>>> +
>>> +       echo "FS should be online, touch should succeed"
>>> +       touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>>> +
>>> +       echo "Check files again"
>>> +       verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
>>> +
>>> +       echo "*** unmount FS"
>>> +       _full "umount"
>>> +       _scratch_unmount >>$seqfull 2>&1 \
>>> +               || _fail "umount failed"
>>> +
>>> +}
>>> +
>>> +verify_fs
>>> +
>>> +echo "*** done"
>>> +rm $seqfull
>>> +status=0
>>> +
>>> +# success, all done
>>> +status=0
>>> +exit
>>> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
>>> new file mode 100644
>>> index 0000000..ccb2d4e
>>> --- /dev/null
>>> +++ b/tests/xfs/448.out
>>> @@ -0,0 +1,1096 @@
>>> +QA output created by 448
>>> +Silence is golden.
>>> +Wrote 2048.00Kb (value 0x2c)
>>> +*** create FS
>>> +*** check FS
>>> +*** mount FS
>>> +
>>> +Create parent pointer test
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +
>>> +Move parent pointer test
>>> +*** testfolder2 OK
>>> +*** testfolder2/file1 OK
>>> +*** testfolder2/file1 OK
>>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>>> +
>>> +Hard link parent pointer test
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link OK
>>> +*** testfolder1/file1_link OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder2/file1 OK
>>> +*** testfolder1/file1_link OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>>> +*** testfolder2 OK
>>> +*** testfolder1/file1_link OK
>>> +*** testfolder2/file1 OK
>>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>>> +*** testfolder2 OK
>>> +*** testfolder2/file1 OK
>>> +*** testfolder2/file1 OK
>>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>>> +
>>> +Remove hard link parent pointer test
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link OK
>>> +*** testfolder1/file1_link OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>>> +*** testfolder1/file1_link OK
>>> +
>>> +Rename parent pointer test
>>> +*** testfolder1 OK
>>> +*** testfolder1/file2 OK
>>> +*** testfolder1/file2 OK
>>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
>>> +*** testfolder1/file2 OK
>>> +
>>> +Over write parent pointer test
>>> +*** testfolder2 OK
>>> +*** testfolder2/file3 OK
>>> +*** testfolder2/file3 OK
>>> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
>>> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
>>> +*** testfolder1 OK
>>> +*** testfolder1/file2 OK
>>> +*** testfolder1/file2 OK
>>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
>>> +
>>> +Multi link parent pointer test
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.0 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.0 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.1 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.2 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.2 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.3 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.3 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.4 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.4 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.5 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.5 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.6 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.6 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.7 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.7 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.8 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.8 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.9 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.9 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.10 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.10 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.11 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.11 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.12 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.12 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.13 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.13 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.14 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.14 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.15 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.15 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.16 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.16 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.17 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.17 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.18 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.18 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.19 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.19 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.20 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.20 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.21 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.21 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.22 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.22 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.23 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.23 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.24 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.24 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.25 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.25 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.26 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.26 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.27 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.27 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.28 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.28 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.29 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.29 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.30 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.30 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.31 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.31 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.32 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.32 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.33 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.33 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.34 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.34 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.35 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.35 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.36 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.36 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.37 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.37 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.38 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.38 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.39 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.39 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.40 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.40 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.41 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.41 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.42 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.42 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.43 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.43 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.44 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.44 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.45 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.45 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.46 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.46 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.47 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.47 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.48 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.48 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.49 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.49 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.50 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.50 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.51 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.51 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.52 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.52 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.53 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.53 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.54 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.54 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.55 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.55 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.56 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.56 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.57 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.57 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.58 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.58 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.59 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.59 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.60 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.60 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.61 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.61 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.62 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.62 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.63 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.63 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.64 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.64 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.65 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.65 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.66 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.66 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.67 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.67 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.68 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.68 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.69 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.69 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.70 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.70 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.71 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.71 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.72 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.72 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.73 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.73 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.74 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.74 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.75 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.75 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.76 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.76 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.77 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.77 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.78 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.78 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.79 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.79 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.80 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.80 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.81 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.81 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.82 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.82 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.83 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.83 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.84 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.84 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.85 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.85 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.86 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.86 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.87 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.87 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.88 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.88 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.89 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.89 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.90 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.90 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.91 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.91 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.92 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.92 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.93 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.93 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.94 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.94 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.95 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.95 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.96 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.96 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.97 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.97 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.98 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.98 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1 OK
>>> +*** testfolder1/file1_link.99 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
>>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>>> +*** testfolder1 OK
>>> +*** testfolder1/file1_link.99 OK
>>> +*** testfolder1/file1 OK
>>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
>>> +Multi unlink parent pointer test
>>> +
>>> +Error inject test
>>> +Create files
>>> +*** testfolder1 OK
>>> +*** testfolder1/file4 OK
>>> +*** testfolder1/file4 OK
>>> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
>>> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
>>> +Inject error
>>> +Move files
>>> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
>>> +FS should be shut down, touch will fail
>>> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
>>> +Remount to replay log
>>> +FS should be online, touch should succeed
>>> +Check files again
>>> +*** testfolder2 OK
>>> +*** testfolder2/file5 OK
>>> +*** testfolder2/file5 OK
>>> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
>>> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
>>> +*** unmount FS
>>> +*** done
>>> diff --git a/tests/xfs/group b/tests/xfs/group
>>> index 2319f58..fb74e82 100644
>>> --- a/tests/xfs/group
>>> +++ b/tests/xfs/group
>>> @@ -445,3 +445,4 @@
>>>   445 auto quick filestreams
>>>   446 auto quick
>>>   447 auto mount
>>> +448 auto
> 
> Isn't this test quick?
> 
> Thanks,
> Amir.

It actually takes about a minute and a half for me, though I guess it 
would depend on how fast the host is.  Most of the time goes into the 
loop of 100: create a hard link, and then scan through all the entries 
to see if the new parent pointer is there.  This was mostly to make sure 
the attr tree was expanding correctly back when I was trying to get the 
transaction rolling straightened out.

Allison


> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=LHZQ8fHvy6wDKXGTWcm97burZH5sQKHRDMaY1UthQxc&m=aTjAAeKdX7wmAVwlNmw7NuPoWNOwiJ-YKh1087i2Ois&s=V4XaeCy1o_l5nS9EcH5We_2b1FbsNZvd5bmVKPYkxbM&e=
> 

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10 18:54       ` Allison Henderson
@ 2018-06-11  5:48         ` Amir Goldstein
  2018-06-11 16:46           ` Allison Henderson
  0 siblings, 1 reply; 20+ messages in thread
From: Amir Goldstein @ 2018-06-11  5:48 UTC (permalink / raw)
  To: Allison Henderson; +Cc: linux-xfs

>>>> diff --git a/tests/xfs/group b/tests/xfs/group
>>>> index 2319f58..fb74e82 100644
>>>> --- a/tests/xfs/group
>>>> +++ b/tests/xfs/group
>>>> @@ -445,3 +445,4 @@
>>>>   445 auto quick filestreams
>>>>   446 auto quick
>>>>   447 auto mount
>>>> +448 auto
>>
>>
>> Isn't this test quick?
>>
>> Thanks,
>> Amir.
>
>
> It actually takes about a minute and a half for me, though I guess it would
> depend on how fast the host is.  Most of the time goes into the loop of 100:
> create a hard link, and then scan through all the entries to see if the new
> parent pointer is there.  This was mostly to make sure the attr tree was
> expanding correctly back when I was trying to get the transaction rolling
> straightened out.
>

That is still a bit surprising to me. I suspect the parent pointer parsing
code that invokes awk so many times may be the culprit. We soemtimes use
little C progs to assist in the test (see in src/) in cases where bash scripting
is insufficient or inefficient.

Perhaps if you use more bash array tricks instead of awk, parsing code
will be faster? assuming that parsing code is the slow down factor?

In any case, a "quick" test gets run more frequently by more people
so it would be a big benefit IMO if you are able to squeeze that test
runtime down to "quick".

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-11  5:48         ` Amir Goldstein
@ 2018-06-11 16:46           ` Allison Henderson
  0 siblings, 0 replies; 20+ messages in thread
From: Allison Henderson @ 2018-06-11 16:46 UTC (permalink / raw)
  To: Amir Goldstein; +Cc: linux-xfs

On 06/10/2018 10:48 PM, Amir Goldstein wrote:
>>>>> diff --git a/tests/xfs/group b/tests/xfs/group
>>>>> index 2319f58..fb74e82 100644
>>>>> --- a/tests/xfs/group
>>>>> +++ b/tests/xfs/group
>>>>> @@ -445,3 +445,4 @@
>>>>>    445 auto quick filestreams
>>>>>    446 auto quick
>>>>>    447 auto mount
>>>>> +448 auto
>>>
>>>
>>> Isn't this test quick?
>>>
>>> Thanks,
>>> Amir.
>>
>>
>> It actually takes about a minute and a half for me, though I guess it would
>> depend on how fast the host is.  Most of the time goes into the loop of 100:
>> create a hard link, and then scan through all the entries to see if the new
>> parent pointer is there.  This was mostly to make sure the attr tree was
>> expanding correctly back when I was trying to get the transaction rolling
>> straightened out.
>>
> 
> That is still a bit surprising to me. I suspect the parent pointer parsing
> code that invokes awk so many times may be the culprit. We soemtimes use
> little C progs to assist in the test (see in src/) in cases where bash scripting
> is insufficient or inefficient.
> 
> Perhaps if you use more bash array tricks instead of awk, parsing code
> will be faster? assuming that parsing code is the slow down factor?
> 
> In any case, a "quick" test gets run more frequently by more people
> so it would be a big benefit IMO if you are able to squeeze that test
> runtime down to "quick".
> 
> Thanks,
> Amir.
Sure, I'll see if I can optimize it a bit and get it running faster.  Thx!

Allison

> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=LHZQ8fHvy6wDKXGTWcm97burZH5sQKHRDMaY1UthQxc&m=vWiNIvBeBg202a7NN7X4n0WSHRr-Ei2L-R8EQOBB9VM&s=mzL-0eBB_n9b0bYDeVwM7Kol762OzPzbUbKNG4pT6QY&e=
> 

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-10  5:10 ` [PATCH v1 1/1] xfstests: Add parent pointer test Allison Henderson
  2018-06-10  5:43   ` Amir Goldstein
@ 2018-06-11 17:25   ` Darrick J. Wong
  2018-06-11 19:59     ` Allison Henderson
  1 sibling, 1 reply; 20+ messages in thread
From: Darrick J. Wong @ 2018-06-11 17:25 UTC (permalink / raw)
  To: Allison Henderson; +Cc: linux-xfs

On Sat, Jun 09, 2018 at 10:10:39PM -0700, Allison Henderson wrote:
> This patch adds a test for basic parent pointer operations,
> including link, unlink, rename, overwrite, hardlinks and
> error inject.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> ---
>  tests/xfs/448     |  423 +++++++++++++++++++++
>  tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++

Whoah, this is a huge ^^^^^ test.  Could you break these up into smaller
tests?  One to test the simple case (a single pptr), one for harder case
(multiple hardlinks), and maybe each of the evil ones each get a separate
testcase?  Also, you might as well tag them all (in test/xfs/group) with
'pptr' or something like that, so that we can all run:

# ./check -g pptr

to run all the parent pointer tests.

>  tests/xfs/group   |    1 +
>  3 files changed, 1520 insertions(+)
> 
> diff --git a/tests/xfs/448 b/tests/xfs/448
> new file mode 100755
> index 0000000..8353bdb
> --- /dev/null
> +++ b/tests/xfs/448
> @@ -0,0 +1,423 @@
> +#! /bin/bash

The xfs* repos are moving to SPDX headers, so please replace the big
copyright statements (all the legalese between the long dashed lines)
with:

# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.

(I thought we (Oracle) were supposed to be GPL-2.0+, fwiw...)

> +# Test 448

"FS QA Test No. 448"

This way tools/mvtest will update the tag if/when the test gets moved.

> +#
> +# parent pointer tests
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#-----------------------------------------------------------------------

example:

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.
#
# FS QA Test No. 448
#
# parent pointer tests

seq=`basename $0`
<other stuff>

> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +seqfull="$seqres.full"
> +tatus=1	# failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +filter_dbval()
> +{
> +	awk '{ print $4 }'
> +}
> +
> +_full()

The only names that should start with an underscore are common/
functions.

> +{
> +    echo ""            >>$seqfull
> +    echo "*** $* ***"  >>$seqfull
> +    echo ""            >>$seqfull
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +. ./common/reflink
> +. ./common/inject
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# Modify as appropriate
> +_supported_os Linux
> +_supported_fs xfs
> +_require_scratch
> +_require_xfs_io_error_injection "delayed_attr"
> +
> +echo "Silence is golden."
> +
> +# real QA test starts here
> +protofile=$tmp.proto
> +tempfile=$tmp.file
> +
> +echo fish >$tempfile
> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
> +
> +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
> +
> +#
> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
> +#
> +# Given a list of parent pointers, find the record that matches
> +# the given inode and filename
> +#
> +# outputs:
> +# PPINO		: Parent pointer inode
> +# PPGEN		: Parent pointer generation
> +# PPNAME	: Parent pointer name
> +# PPNAME_LEN	: Parent pointer name length
> +#
> +parse_parent_pointer()

These next two helpers, OTOH, might be good candidates for common/pptr
or something... as Amir points out separately, it might be faster to
implement some of this as a C helper, though a lot depends on what
exactly makes the test runtime high in the first place. :)

I also kinda wonder if xfs_io's parent command ought to have a "return
only the parent-links to this directory...

> +{
> +	PARENTS=$1
> +	PINO=$2
> +	PARENT_POINTER_NAME=$3
> +
> +	PLEN=${#PARENTS[@]}
> +	FOUND=0
> +
> +	# Find the entry that has the same inode as the parent
> +	# and parse out the entry info
> +	for (( i=0; i<${PLEN}; i++ )); do
> +
> +		#advance to the parent entry matching the parent inode
> +		if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
> +			continue
> +		fi
> +
> +		PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +		((i++))
> +		PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +		((i++))
> +		PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> +
> +		((i++))
> +		PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
> +
> +		if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
> +			continue
> +		fi
> +
> +		break
> +	done
> +
> +	# If exhausted the list, we didnt find anything
> +	if [ $i -eq $PLEN ]; then
> +		return 0

Shell commands (and bash functions) return 0 for success and nonzero for
error.

You could also just _fail directly if nothing is found.

> +	fi
> +
> +	# Verify the parent pointer name length is correct
> +	if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
> +	then
> +		_fail "Bad parent pointer reclen for $CHILD_PATH"
> +	fi
> +
> +	#return sucess
> +	return 1
> +
> +}
> +
> +#
> +# 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
> +#
> +# #hardlink example
> +# mkdir testfolder1
> +# mkdir testfolder2
> +# touch testfolder1/file1
> +# ln testfolder1/file1 testfolder2/file1_ln
> +# verify_parent testfolder2 file1_ln testfolder1/file1
> +#
> +verify_parent()
> +{
> +
> +	PARENT_PATH=$1
> +	PARENT_POINTER_NAME=$2
> +	CHILD_PATH=$3
> +
> +	CHILD_NAME=$(basename "$CHILD_PATH")
> +	PPINO=0
> +	PPGEN=0
> +	PPNAME_LEN=0
> +	PPNAME=""
> +	IFS=$'\n'
> +
> +	# 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
> +	PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
> +
> +	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 $SCRATCH_MNT/$CHILD_PATH))
> +	if [[ $? != 0 ]]; then
> +		 _fail "No parent pointers found for $CHILD_PATH"
> +	fi
> +
> +	parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
> +	FOUND=$?
> +
> +	# If we didnt find one, bail out
> +	if [ $FOUND -eq 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:"\
> +			"inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
> +	echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
> +}
> +
> +#
> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
> +#
> +# Verify that the given child path contains no parent pointer entry
> +# for the given parent path and parnet pointer name
> +#
> +verify_no_parent()
> +{
> +
> +	PARENT_PATH=$1
> +	PARENT_PNAME=$2
> +	CHILD_PATH=$3
> +	CHILD_NAME=$(basename "$CHILD_PATH")
> +	PPINO=0
> +	PPGEN=0
> +	PPNAME_LEN=0
> +	PPNAME=""
> +	IFS=$'\n'

Uppercase variable names are usually reserved for global variables, and
local function variables should be declared with the 'local' keyword to
prevent them from escaping scope. e.g.

	local parent_path="$1"

Note that setting IFS here affects everything called after
verify_no_parent, which is a side effect you might not want.

> +
> +	# Check if parent even exists
> +	if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
> +		return 0
> +	fi
> +
> +
> +	# Verify child exists
> +	if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
> +		_fail "$SCRATCH_MNT/$CHILD_PATH not found"
> +	else
> +		echo "*** $CHILD_PATH OK"
> +	fi
> +
> +	# Get parent inode
> +	PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
> +
> +	# Get all the parent pointers of the child
> +	PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
> +	if [[ $? != 0 ]]; then
> +		return 0
> +	fi
> +
> +	parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
> +	FOUND=$?
> +
> +	# If we didnt find one, return sucess
> +	if [ $FOUND -eq 0 ]; then
> +		return 0
> +	fi
> +
> +	_fail "Parent pointer entry found where none should:"\
> +			"inode:$PPINO, gen:$PPGEN,"
> +			"name:$PPNAME, namelen:$PPNAME_LEN"
> +}
> +
> +verify_fs()

This whole thing could simply be a part of the main script body (i.e.
you don't need a helper function that's only called once)

--D

> +{
> +	echo "*** create FS"
> +
> +	rm -f $seqfull
> +	_scratch_unmount >/dev/null 2>&1
> +
> +	_scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
> +		|| _fail "mkfs failed"
> +	echo "*** check FS"
> +	_check_scratch_fs
> +
> +	echo "*** mount FS"
> +	_full " mount"
> +	_scratch_mount >>$seqfull 2>&1 \
> +		|| _fail "mount failed"
> +
> +	TESTFOLDER1="testfolder1"
> +	TESTFOLDER2="testfolder2"
> +	FILE1="file1"
> +	FILE2="file2"
> +	FILE3="file3"
> +	FILE4="file4"
> +	FILE5="file5"
> +	FILE1_LN="file1_link"
> +
> +	echo ""
> +	echo "Create parent pointer test"
> +	verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
> +
> +	echo ""
> +	echo "Move parent pointer test"
> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> +	verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
> +
> +	echo ""
> +	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 ""
> +	echo "Remove hard link parent pointer test"
> +	rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> +	verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
> +	verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
> +
> +	echo ""
> +	echo "Rename parent pointer test"
> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> +	verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
> +
> +	echo ""
> +	echo "Over write parent pointer test"
> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
> +	verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
> +	mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> +
> +
> +	echo ""
> +	echo "Multi link parent pointer test"
> +	NLINKS=100
> +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
> +	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
> +	echo "Multi unlink parent pointer test"
> +	for (( j=$NLINKS-1; j<=0; j-- )); do
> +		rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
> +		verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
> +	done
> +
> +
> +	echo ""
> +	echo "Error inject test"
> +
> +	echo "Create files"
> +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
> +	verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
> +
> +	echo "Inject error"
> +	_scratch_inject_error "delayed_attr"
> +
> +	echo "Move files"
> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> +
> +	echo "FS should be shut down, touch will fail"
> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
> +
> +	echo "Remount to replay log"
> +	_scratch_inject_logprint >> $seqres.full
> +
> +	echo "FS should be online, touch should succeed"
> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> +
> +	echo "Check files again"
> +	verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
> +
> +	echo "*** unmount FS"
> +	_full "umount"
> +	_scratch_unmount >>$seqfull 2>&1 \
> +		|| _fail "umount failed"
> +
> +}
> +
> +verify_fs
> +
> +echo "*** done"
> +rm $seqfull
> +status=0
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
> new file mode 100644
> index 0000000..ccb2d4e
> --- /dev/null
> +++ b/tests/xfs/448.out
> @@ -0,0 +1,1096 @@
> +QA output created by 448
> +Silence is golden.
> +Wrote 2048.00Kb (value 0x2c)
> +*** create FS
> +*** check FS
> +*** mount FS
> +
> +Create parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +
> +Move parent pointer test
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +
> +Hard link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder1 OK
> +*** testfolder2/file1 OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +*** testfolder2 OK
> +*** testfolder1/file1_link OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> +
> +Remove hard link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> +*** testfolder1/file1_link OK
> +
> +Rename parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
> +*** testfolder1/file2 OK
> +
> +Over write parent pointer test
> +*** testfolder2 OK
> +*** testfolder2/file3 OK
> +*** testfolder2/file3 OK
> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
> +
> +Multi link parent pointer test
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.0 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.0 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.1 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.2 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.2 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.3 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.3 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.4 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.4 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.5 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.5 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.6 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.6 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.7 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.7 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.8 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.8 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.9 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.9 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.10 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.10 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.11 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.11 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.12 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.12 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.13 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.13 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.14 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.14 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.15 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.15 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.16 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.16 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.17 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.17 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.18 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.18 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.19 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.19 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.20 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.20 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.21 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.21 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.22 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.22 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.23 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.23 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.24 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.24 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.25 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.25 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.26 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.26 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.27 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.27 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.28 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.28 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.29 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.29 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.30 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.30 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.31 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.31 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.32 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.32 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.33 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.33 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.34 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.34 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.35 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.35 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.36 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.36 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.37 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.37 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.38 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.38 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.39 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.39 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.40 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.40 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.41 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.41 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.42 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.42 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.43 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.43 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.44 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.44 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.45 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.45 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.46 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.46 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.47 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.47 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.48 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.48 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.49 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.49 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.50 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.50 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.51 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.51 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.52 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.52 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.53 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.53 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.54 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.54 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.55 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.55 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.56 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.56 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.57 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.57 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.58 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.58 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.59 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.59 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.60 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.60 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.61 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.61 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.62 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.62 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.63 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.63 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.64 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.64 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.65 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.65 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.66 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.66 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.67 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.67 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.68 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.68 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.69 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.69 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.70 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.70 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.71 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.71 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.72 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.72 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.73 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.73 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.74 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.74 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.75 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.75 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.76 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.76 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.77 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.77 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.78 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.78 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.79 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.79 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.80 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.80 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.81 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.81 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.82 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.82 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.83 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.83 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.84 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.84 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.85 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.85 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.86 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.86 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.87 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.87 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.88 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.88 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.89 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.89 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.90 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.90 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.91 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.91 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.92 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.92 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.93 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.93 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.94 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.94 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.95 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.95 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.96 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.96 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.97 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.97 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.98 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.98 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.99 OK
> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> +*** testfolder1 OK
> +*** testfolder1/file1_link.99 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
> +Multi unlink parent pointer test
> +
> +Error inject test
> +Create files
> +*** testfolder1 OK
> +*** testfolder1/file4 OK
> +*** testfolder1/file4 OK
> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
> +Inject error
> +Move files
> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
> +FS should be shut down, touch will fail
> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
> +Remount to replay log
> +FS should be online, touch should succeed
> +Check files again
> +*** testfolder2 OK
> +*** testfolder2/file5 OK
> +*** testfolder2/file5 OK
> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
> +*** unmount FS
> +*** done
> diff --git a/tests/xfs/group b/tests/xfs/group
> index 2319f58..fb74e82 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -445,3 +445,4 @@
>  445 auto quick filestreams
>  446 auto quick
>  447 auto mount
> +448 auto
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-11 17:25   ` Darrick J. Wong
@ 2018-06-11 19:59     ` Allison Henderson
  2018-06-11 20:36       ` Darrick J. Wong
  0 siblings, 1 reply; 20+ messages in thread
From: Allison Henderson @ 2018-06-11 19:59 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On 06/11/2018 10:25 AM, Darrick J. Wong wrote:
> On Sat, Jun 09, 2018 at 10:10:39PM -0700, Allison Henderson wrote:
>> This patch adds a test for basic parent pointer operations,
>> including link, unlink, rename, overwrite, hardlinks and
>> error inject.
>>
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> ---
>>   tests/xfs/448     |  423 +++++++++++++++++++++
>>   tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Whoah, this is a huge ^^^^^ test.  Could you break these up into smaller
> tests?  One to test the simple case (a single pptr), one for harder case
> (multiple hardlinks), and maybe each of the evil ones each get a separate
> testcase?  Also, you might as well tag them all (in test/xfs/group) with
> 'pptr' or something like that, so that we can all run:
> 
> # ./check -g pptr
> 
> to run all the parent pointer tests.
> 

Sure, I'll try to break them up a little and make a group to put them in.

>>   tests/xfs/group   |    1 +
>>   3 files changed, 1520 insertions(+)
>>
>> diff --git a/tests/xfs/448 b/tests/xfs/448
>> new file mode 100755
>> index 0000000..8353bdb
>> --- /dev/null
>> +++ b/tests/xfs/448
>> @@ -0,0 +1,423 @@
>> +#! /bin/bash
> 
> The xfs* repos are moving to SPDX headers, so please replace the big
> copyright statements (all the legalese between the long dashed lines)
> with:
> 
> # SPDX-License-Identifier: GPL-2.0
> # Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.
> 
> (I thought we (Oracle) were supposed to be GPL-2.0+, fwiw...)
> 
>> +# Test 448
> 
> "FS QA Test No. 448"
> 
> This way tools/mvtest will update the tag if/when the test gets moved.
> 
>> +#
>> +# parent pointer tests
>> +#
>> +#-----------------------------------------------------------------------
>> +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>> +#-----------------------------------------------------------------------
> 
> example:
> 
> #! /bin/bash
> # SPDX-License-Identifier: GPL-2.0
> # Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.
> #
> # FS QA Test No. 448
> #
> # parent pointer tests
> 
> seq=`basename $0`
> <other stuff>
> 
Sure, will do.  Does this apply to new files added in xfsprogs too?

>> +#
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +seqfull="$seqres.full"
>> +tatus=1	# failure is the default!
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +_cleanup()
>> +{
>> +	cd /
>> +	rm -f $tmp.*
>> +}
>> +
>> +filter_dbval()
>> +{
>> +	awk '{ print $4 }'
>> +}
>> +
>> +_full()
> 
> The only names that should start with an underscore are common/
> functions.
> 
Alrighty, will fix

>> +{
>> +    echo ""            >>$seqfull
>> +    echo "*** $* ***"  >>$seqfull
>> +    echo ""            >>$seqfull
>> +}
>> +
>> +# get standard environment, filters and checks
>> +. ./common/rc
>> +. ./common/filter
>> +. ./common/reflink
>> +. ./common/inject
>> +
>> +# remove previous $seqres.full before test
>> +rm -f $seqres.full
>> +
>> +# Modify as appropriate
>> +_supported_os Linux
>> +_supported_fs xfs
>> +_require_scratch
>> +_require_xfs_io_error_injection "delayed_attr"
>> +
>> +echo "Silence is golden."
>> +
>> +# real QA test starts here
>> +protofile=$tmp.proto
>> +tempfile=$tmp.file
>> +
>> +echo fish >$tempfile
>> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
>> +
>> +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
>> +
>> +#
>> +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
>> +#
>> +# Given a list of parent pointers, find the record that matches
>> +# the given inode and filename
>> +#
>> +# outputs:
>> +# PPINO		: Parent pointer inode
>> +# PPGEN		: Parent pointer generation
>> +# PPNAME	: Parent pointer name
>> +# PPNAME_LEN	: Parent pointer name length
>> +#
>> +parse_parent_pointer()
> 
> These next two helpers, OTOH, might be good candidates for common/pptr
> or something... as Amir points out separately, it might be faster to
> implement some of this as a C helper, though a lot depends on what
> exactly makes the test runtime high in the first place. :)
> 
> I also kinda wonder if xfs_io's parent command ought to have a "return
> only the parent-links to this directory...

Sure, I'll move some stuff around and see what works best.  For the 
multilink section, all but a few of the entries are links.  I do notice 
they are coming through fifo though.  I'm thinking maybe if i set up 
something that starts scanning from the bottom, worst case may turn into 
best case.

> 
>> +{
>> +	PARENTS=$1
>> +	PINO=$2
>> +	PARENT_POINTER_NAME=$3
>> +
>> +	PLEN=${#PARENTS[@]}
>> +	FOUND=0
>> +
>> +	# Find the entry that has the same inode as the parent
>> +	# and parse out the entry info
>> +	for (( i=0; i<${PLEN}; i++ )); do
>> +
>> +		#advance to the parent entry matching the parent inode
>> +		if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
>> +			continue
>> +		fi
>> +
>> +		PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +		((i++))
>> +		PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +		((i++))
>> +		PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
>> +
>> +		((i++))
>> +		PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
>> +
>> +		if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
>> +			continue
>> +		fi
>> +
>> +		break
>> +	done
>> +
>> +	# If exhausted the list, we didnt find anything
>> +	if [ $i -eq $PLEN ]; then
>> +		return 0
> 
> Shell commands (and bash functions) return 0 for success and nonzero for
> error.
> 
> You could also just _fail directly if nothing is found.
Alrighty then, will adjust the error code.  We cant fail just yet 
though, because we use this to validate that old pptrs go away when they 
should.  Like for when things move or get renamed

> 
>> +	fi
>> +
>> +	# Verify the parent pointer name length is correct
>> +	if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
>> +	then
>> +		_fail "Bad parent pointer reclen for $CHILD_PATH"
>> +	fi
>> +
>> +	#return sucess
>> +	return 1
>> +
>> +}
>> +
>> +#
>> +# 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
>> +#
>> +# #hardlink example
>> +# mkdir testfolder1
>> +# mkdir testfolder2
>> +# touch testfolder1/file1
>> +# ln testfolder1/file1 testfolder2/file1_ln
>> +# verify_parent testfolder2 file1_ln testfolder1/file1
>> +#
>> +verify_parent()
>> +{
>> +
>> +	PARENT_PATH=$1
>> +	PARENT_POINTER_NAME=$2
>> +	CHILD_PATH=$3
>> +
>> +	CHILD_NAME=$(basename "$CHILD_PATH")
>> +	PPINO=0
>> +	PPGEN=0
>> +	PPNAME_LEN=0
>> +	PPNAME=""
>> +	IFS=$'\n'
>> +
>> +	# 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
>> +	PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
>> +
>> +	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 $SCRATCH_MNT/$CHILD_PATH))
>> +	if [[ $? != 0 ]]; then
>> +		 _fail "No parent pointers found for $CHILD_PATH"
>> +	fi
>> +
>> +	parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
>> +	FOUND=$?
>> +
>> +	# If we didnt find one, bail out
>> +	if [ $FOUND -eq 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:"\
>> +			"inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
>> +	echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
>> +}
>> +
>> +#
>> +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
>> +#
>> +# Verify that the given child path contains no parent pointer entry
>> +# for the given parent path and parnet pointer name
>> +#
>> +verify_no_parent()
>> +{
>> +
>> +	PARENT_PATH=$1
>> +	PARENT_PNAME=$2
>> +	CHILD_PATH=$3
>> +	CHILD_NAME=$(basename "$CHILD_PATH")
>> +	PPINO=0
>> +	PPGEN=0
>> +	PPNAME_LEN=0
>> +	PPNAME=""
>> +	IFS=$'\n'
> 
> Uppercase variable names are usually reserved for global variables, and
> local function variables should be declared with the 'local' keyword to
> prevent them from escaping scope. e.g.
> 
> 	local parent_path="$1"
> 
> Note that setting IFS here affects everything called after
> verify_no_parent, which is a side effect you might not want.
> 
Alrighty then, will fix.  Some of these may go away depending on how the 
sub routines get redone.

>> +
>> +	# Check if parent even exists
>> +	if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
>> +		return 0
>> +	fi
>> +
>> +
>> +	# Verify child exists
>> +	if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
>> +		_fail "$SCRATCH_MNT/$CHILD_PATH not found"
>> +	else
>> +		echo "*** $CHILD_PATH OK"
>> +	fi
>> +
>> +	# Get parent inode
>> +	PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
>> +
>> +	# Get all the parent pointers of the child
>> +	PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
>> +	if [[ $? != 0 ]]; then
>> +		return 0
>> +	fi
>> +
>> +	parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
>> +	FOUND=$?
>> +
>> +	# If we didnt find one, return sucess
>> +	if [ $FOUND -eq 0 ]; then
>> +		return 0
>> +	fi
>> +
>> +	_fail "Parent pointer entry found where none should:"\
>> +			"inode:$PPINO, gen:$PPGEN,"
>> +			"name:$PPNAME, namelen:$PPNAME_LEN"
>> +}
>> +
>> +verify_fs()
> 
> This whole thing could simply be a part of the main script body (i.e.
> you don't need a helper function that's only called once)
> 
> --D

Ok, I will collapse this one down.  Thx!

Allison

> 
>> +{
>> +	echo "*** create FS"
>> +
>> +	rm -f $seqfull
>> +	_scratch_unmount >/dev/null 2>&1
>> +
>> +	_scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
>> +		|| _fail "mkfs failed"
>> +	echo "*** check FS"
>> +	_check_scratch_fs
>> +
>> +	echo "*** mount FS"
>> +	_full " mount"
>> +	_scratch_mount >>$seqfull 2>&1 \
>> +		|| _fail "mount failed"
>> +
>> +	TESTFOLDER1="testfolder1"
>> +	TESTFOLDER2="testfolder2"
>> +	FILE1="file1"
>> +	FILE2="file2"
>> +	FILE3="file3"
>> +	FILE4="file4"
>> +	FILE5="file5"
>> +	FILE1_LN="file1_link"
>> +
>> +	echo ""
>> +	echo "Create parent pointer test"
>> +	verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
>> +
>> +	echo ""
>> +	echo "Move parent pointer test"
>> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +	verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
>> +
>> +	echo ""
>> +	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 ""
>> +	echo "Remove hard link parent pointer test"
>> +	rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
>> +	verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
>> +	verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
>> +
>> +	echo ""
>> +	echo "Rename parent pointer test"
>> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +	verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
>> +
>> +	echo ""
>> +	echo "Over write parent pointer test"
>> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
>> +	verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
>> +	mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
>> +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
>> +
>> +
>> +	echo ""
>> +	echo "Multi link parent pointer test"
>> +	NLINKS=100
>> +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
>> +	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
>> +	echo "Multi unlink parent pointer test"
>> +	for (( j=$NLINKS-1; j<=0; j-- )); do
>> +		rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
>> +		verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
>> +	done
>> +
>> +
>> +	echo ""
>> +	echo "Error inject test"
>> +
>> +	echo "Create files"
>> +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
>> +	verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
>> +
>> +	echo "Inject error"
>> +	_scratch_inject_error "delayed_attr"
>> +
>> +	echo "Move files"
>> +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +	echo "FS should be shut down, touch will fail"
>> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
>> +
>> +	echo "Remount to replay log"
>> +	_scratch_inject_logprint >> $seqres.full
>> +
>> +	echo "FS should be online, touch should succeed"
>> +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
>> +
>> +	echo "Check files again"
>> +	verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
>> +
>> +	echo "*** unmount FS"
>> +	_full "umount"
>> +	_scratch_unmount >>$seqfull 2>&1 \
>> +		|| _fail "umount failed"
>> +
>> +}
>> +
>> +verify_fs
>> +
>> +echo "*** done"
>> +rm $seqfull
>> +status=0
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/xfs/448.out b/tests/xfs/448.out
>> new file mode 100644
>> index 0000000..ccb2d4e
>> --- /dev/null
>> +++ b/tests/xfs/448.out
>> @@ -0,0 +1,1096 @@
>> +QA output created by 448
>> +Silence is golden.
>> +Wrote 2048.00Kb (value 0x2c)
>> +*** create FS
>> +*** check FS
>> +*** mount FS
>> +
>> +Create parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +
>> +Move parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1 inode:16777345
>> +
>> +Remove hard link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
>> +*** testfolder1/file1_link OK
>> +
>> +Rename parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:16777345
>> +*** testfolder1/file2 OK
>> +
>> +Over write parent pointer test
>> +*** testfolder2 OK
>> +*** testfolder2/file3 OK
>> +*** testfolder2/file3 OK
>> +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
>> +*** Parent pointer OK for child testfolder2/file3 inode:33613314
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2 inode:33613314
>> +
>> +Multi link parent pointer test
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1 inode:16777345
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
>> +Multi unlink parent pointer test
>> +
>> +Error inject test
>> +Create files
>> +*** testfolder1 OK
>> +*** testfolder1/file4 OK
>> +*** testfolder1/file4 OK
>> +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
>> +*** Parent pointer OK for child testfolder1/file4 inode:16777346
>> +Inject error
>> +Move files
>> +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
>> +FS should be shut down, touch will fail
>> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
>> +Remount to replay log
>> +FS should be online, touch should succeed
>> +Check files again
>> +*** testfolder2 OK
>> +*** testfolder2/file5 OK
>> +*** testfolder2/file5 OK
>> +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
>> +*** Parent pointer OK for child testfolder2/file5 inode:16777346
>> +*** unmount FS
>> +*** done
>> diff --git a/tests/xfs/group b/tests/xfs/group
>> index 2319f58..fb74e82 100644
>> --- a/tests/xfs/group
>> +++ b/tests/xfs/group
>> @@ -445,3 +445,4 @@
>>   445 auto quick filestreams
>>   446 auto quick
>>   447 auto mount
>> +448 auto
>> -- 
>> 2.7.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2018-06-11 19:59     ` Allison Henderson
@ 2018-06-11 20:36       ` Darrick J. Wong
  0 siblings, 0 replies; 20+ messages in thread
From: Darrick J. Wong @ 2018-06-11 20:36 UTC (permalink / raw)
  To: Allison Henderson; +Cc: linux-xfs

On Mon, Jun 11, 2018 at 12:59:42PM -0700, Allison Henderson wrote:
> On 06/11/2018 10:25 AM, Darrick J. Wong wrote:
> > On Sat, Jun 09, 2018 at 10:10:39PM -0700, Allison Henderson wrote:
> > > This patch adds a test for basic parent pointer operations,
> > > including link, unlink, rename, overwrite, hardlinks and
> > > error inject.
> > > 
> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > ---
> > >   tests/xfs/448     |  423 +++++++++++++++++++++
> > >   tests/xfs/448.out | 1096 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 
> > Whoah, this is a huge ^^^^^ test.  Could you break these up into smaller
> > tests?  One to test the simple case (a single pptr), one for harder case
> > (multiple hardlinks), and maybe each of the evil ones each get a separate
> > testcase?  Also, you might as well tag them all (in test/xfs/group) with
> > 'pptr' or something like that, so that we can all run:
> > 
> > # ./check -g pptr
> > 
> > to run all the parent pointer tests.
> > 
> 
> Sure, I'll try to break them up a little and make a group to put them in.
> 
> > >   tests/xfs/group   |    1 +
> > >   3 files changed, 1520 insertions(+)
> > > 
> > > diff --git a/tests/xfs/448 b/tests/xfs/448
> > > new file mode 100755
> > > index 0000000..8353bdb
> > > --- /dev/null
> > > +++ b/tests/xfs/448
> > > @@ -0,0 +1,423 @@
> > > +#! /bin/bash
> > 
> > The xfs* repos are moving to SPDX headers, so please replace the big
> > copyright statements (all the legalese between the long dashed lines)
> > with:
> > 
> > # SPDX-License-Identifier: GPL-2.0
> > # Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.
> > 
> > (I thought we (Oracle) were supposed to be GPL-2.0+, fwiw...)
> > 
> > > +# Test 448
> > 
> > "FS QA Test No. 448"
> > 
> > This way tools/mvtest will update the tag if/when the test gets moved.
> > 
> > > +#
> > > +# parent pointer tests
> > > +#
> > > +#-----------------------------------------------------------------------
> > > +# Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
> > > +#
> > > +# This program is free software; you can redistribute it and/or
> > > +# modify it under the terms of the GNU General Public License as
> > > +# published by the Free Software Foundation.
> > > +#
> > > +# This program is distributed in the hope that it would be useful,
> > > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > > +# GNU General Public License for more details.
> > > +#
> > > +# You should have received a copy of the GNU General Public License
> > > +# along with this program; if not, write the Free Software Foundation,
> > > +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> > > +#-----------------------------------------------------------------------
> > 
> > example:
> > 
> > #! /bin/bash
> > # SPDX-License-Identifier: GPL-2.0
> > # Copyright (c) 2018, Oracle and/or its affiliates.  All Rights Reserved.
> > #
> > # FS QA Test No. 448
> > #
> > # parent pointer tests
> > 
> > seq=`basename $0`
> > <other stuff>
> > 
> Sure, will do.  Does this apply to new files added in xfsprogs too?

Not at this exact instant but I think we'll have finished the spdx
transition in kernel/xfsprogs by the time 4.18 get released.

(FWIW I have it queued up kernel-side in for-next, but as there wasn't a
tree for Monday 6/11 I haven't sent Linus a pull req yet.)

> > > +#
> > > +
> > > +seq=`basename $0`
> > > +seqres=$RESULT_DIR/$seq
> > > +echo "QA output created by $seq"
> > > +
> > > +here=`pwd`
> > > +tmp=/tmp/$$
> > > +seqfull="$seqres.full"
> > > +tatus=1	# failure is the default!
> > > +trap "_cleanup; exit \$status" 0 1 2 3 15
> > > +
> > > +_cleanup()
> > > +{
> > > +	cd /
> > > +	rm -f $tmp.*
> > > +}
> > > +
> > > +filter_dbval()
> > > +{
> > > +	awk '{ print $4 }'
> > > +}
> > > +
> > > +_full()
> > 
> > The only names that should start with an underscore are common/
> > functions.
> > 
> Alrighty, will fix
> 
> > > +{
> > > +    echo ""            >>$seqfull
> > > +    echo "*** $* ***"  >>$seqfull
> > > +    echo ""            >>$seqfull
> > > +}
> > > +
> > > +# get standard environment, filters and checks
> > > +. ./common/rc
> > > +. ./common/filter
> > > +. ./common/reflink
> > > +. ./common/inject
> > > +
> > > +# remove previous $seqres.full before test
> > > +rm -f $seqres.full
> > > +
> > > +# Modify as appropriate
> > > +_supported_os Linux
> > > +_supported_fs xfs
> > > +_require_scratch
> > > +_require_xfs_io_error_injection "delayed_attr"
> > > +
> > > +echo "Silence is golden."
> > > +
> > > +# real QA test starts here
> > > +protofile=$tmp.proto
> > > +tempfile=$tmp.file
> > > +
> > > +echo fish >$tempfile
> > > +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2
> > > +
> > > +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
> > > +
> > > +#
> > > +# parse_parent_pointer PARENT_POINTER_LIST PARENT_INODE PARENT_POINTER_NAME
> > > +#
> > > +# Given a list of parent pointers, find the record that matches
> > > +# the given inode and filename
> > > +#
> > > +# outputs:
> > > +# PPINO		: Parent pointer inode
> > > +# PPGEN		: Parent pointer generation
> > > +# PPNAME	: Parent pointer name
> > > +# PPNAME_LEN	: Parent pointer name length
> > > +#
> > > +parse_parent_pointer()
> > 
> > These next two helpers, OTOH, might be good candidates for common/pptr
> > or something... as Amir points out separately, it might be faster to
> > implement some of this as a C helper, though a lot depends on what
> > exactly makes the test runtime high in the first place. :)
> > 
> > I also kinda wonder if xfs_io's parent command ought to have a "return
> > only the parent-links to this directory...
> 
> Sure, I'll move some stuff around and see what works best.  For the
> multilink section, all but a few of the entries are links.  I do notice they
> are coming through fifo though.  I'm thinking maybe if i set up something
> that starts scanning from the bottom, worst case may turn into best case.

<nod> AFAICT we just return entries in the order that they land in the
attribute fork, which usually is FIFO for a clean fs.  It might not be
for an xattr tree with a lot of set/remove activity.  Userspace is
responsible for collecting all the entries and applying whatever
transformations it wants.

> 
> > 
> > > +{
> > > +	PARENTS=$1
> > > +	PINO=$2
> > > +	PARENT_POINTER_NAME=$3
> > > +
> > > +	PLEN=${#PARENTS[@]}
> > > +	FOUND=0
> > > +
> > > +	# Find the entry that has the same inode as the parent
> > > +	# and parse out the entry info
> > > +	for (( i=0; i<${PLEN}; i++ )); do
> > > +
> > > +		#advance to the parent entry matching the parent inode
> > > +		if ! echo ${PARENTS[$i]} | grep -q "p_ino    = $PINO" ; then
> > > +			continue
> > > +		fi
> > > +
> > > +		PPINO="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> > > +
> > > +		((i++))
> > > +		PPGEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> > > +
> > > +		((i++))
> > > +		PPNAME_LEN="$(echo ${PARENTS[$i]} | awk '{print $NF}')"
> > > +
> > > +		((i++))
> > > +		PPNAME="$(echo ${PARENTS[$i]} | awk '{print $NF}' | cut -d '"' -f2 )"
> > > +
> > > +		if [ "$PPNAME" != "$PARENT_POINTER_NAME" ]; then
> > > +			continue
> > > +		fi
> > > +
> > > +		break
> > > +	done
> > > +
> > > +	# If exhausted the list, we didnt find anything
> > > +	if [ $i -eq $PLEN ]; then
> > > +		return 0
> > 
> > Shell commands (and bash functions) return 0 for success and nonzero for
> > error.
> > 
> > You could also just _fail directly if nothing is found.
> Alrighty then, will adjust the error code.  We cant fail just yet though,
> because we use this to validate that old pptrs go away when they should.
> Like for when things move or get renamed

Understood. (Maybe a comment?) :)

> 
> > 
> > > +	fi
> > > +
> > > +	# Verify the parent pointer name length is correct
> > > +	if [ $PPNAME_LEN -ne ${#PARENT_POINTER_NAME} ]
> > > +	then
> > > +		_fail "Bad parent pointer reclen for $CHILD_PATH"
> > > +	fi
> > > +
> > > +	#return sucess
> > > +	return 1
> > > +
> > > +}
> > > +
> > > +#
> > > +# 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
> > > +#
> > > +# #hardlink example
> > > +# mkdir testfolder1
> > > +# mkdir testfolder2
> > > +# touch testfolder1/file1
> > > +# ln testfolder1/file1 testfolder2/file1_ln
> > > +# verify_parent testfolder2 file1_ln testfolder1/file1
> > > +#
> > > +verify_parent()
> > > +{
> > > +
> > > +	PARENT_PATH=$1
> > > +	PARENT_POINTER_NAME=$2
> > > +	CHILD_PATH=$3
> > > +
> > > +	CHILD_NAME=$(basename "$CHILD_PATH")
> > > +	PPINO=0
> > > +	PPGEN=0
> > > +	PPNAME_LEN=0
> > > +	PPNAME=""
> > > +	IFS=$'\n'
> > > +
> > > +	# 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
> > > +	PARENT_PPATH="$PARENT_PATH/$PARENT_POINTER_NAME"
> > > +
> > > +	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 $SCRATCH_MNT/$CHILD_PATH))
> > > +	if [[ $? != 0 ]]; then
> > > +		 _fail "No parent pointers found for $CHILD_PATH"
> > > +	fi
> > > +
> > > +	parse_parent_pointer $PARENTS $PINO $PARENT_POINTER_NAME
> > > +	FOUND=$?
> > > +
> > > +	# If we didnt find one, bail out
> > > +	if [ $FOUND -eq 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:"\
> > > +			"inode:$PPINO, name:$PPNAME, namelen:$PPNAME_LEN"
> > > +	echo "*** Parent pointer OK for child $CHILD_PATH inode:$CINO"
> > > +}
> > > +
> > > +#
> > > +# verify_parent PARENT_PATH PARENT_POINTER_NAME CHILD_PATH
> > > +#
> > > +# Verify that the given child path contains no parent pointer entry
> > > +# for the given parent path and parnet pointer name
> > > +#
> > > +verify_no_parent()
> > > +{
> > > +
> > > +	PARENT_PATH=$1
> > > +	PARENT_PNAME=$2
> > > +	CHILD_PATH=$3
> > > +	CHILD_NAME=$(basename "$CHILD_PATH")
> > > +	PPINO=0
> > > +	PPGEN=0
> > > +	PPNAME_LEN=0
> > > +	PPNAME=""
> > > +	IFS=$'\n'
> > 
> > Uppercase variable names are usually reserved for global variables, and
> > local function variables should be declared with the 'local' keyword to
> > prevent them from escaping scope. e.g.
> > 
> > 	local parent_path="$1"
> > 
> > Note that setting IFS here affects everything called after
> > verify_no_parent, which is a side effect you might not want.
> > 
> Alrighty then, will fix.  Some of these may go away depending on how the sub
> routines get redone.

I forgot to mention in my earlier reply that perhaps the IFS= should be
applied directly to the input parsing command, e.g.

cat /etc/passwd | while IFS=: read uname junk uid junk; do echo $uid $uname; done

Also, I would suggest adding a flag to the parent command to spit out
results in some sort of machine readable format.  Though given that the
only illegal character in a filename is the path separator I guess
you're stuck with:

/$ino/$gen/$offset/$name

(yes, slashes as the field separator...)

--D

> > > +
> > > +	# Check if parent even exists
> > > +	if [ ! -d $SCRATCH_MNT/$PARENT_PATH ]; then
> > > +		return 0
> > > +	fi
> > > +
> > > +
> > > +	# Verify child exists
> > > +	if [ ! -f $SCRATCH_MNT/$CHILD_PATH ]; then
> > > +		_fail "$SCRATCH_MNT/$CHILD_PATH not found"
> > > +	else
> > > +		echo "*** $CHILD_PATH OK"
> > > +	fi
> > > +
> > > +	# Get parent inode
> > > +	PINO="$(stat -c '%i' $SCRATCH_MNT/$PARENT_PATH)"
> > > +
> > > +	# Get all the parent pointers of the child
> > > +	PARENTS=($($XFS_IO_PROG -x -c parent $SCRATCH_MNT/$CHILD_PATH))
> > > +	if [[ $? != 0 ]]; then
> > > +		return 0
> > > +	fi
> > > +
> > > +	parse_parent_pointer $PARENTS $PINO $PARENT_PNAME
> > > +	FOUND=$?
> > > +
> > > +	# If we didnt find one, return sucess
> > > +	if [ $FOUND -eq 0 ]; then
> > > +		return 0
> > > +	fi
> > > +
> > > +	_fail "Parent pointer entry found where none should:"\
> > > +			"inode:$PPINO, gen:$PPGEN,"
> > > +			"name:$PPNAME, namelen:$PPNAME_LEN"
> > > +}
> > > +
> > > +verify_fs()
> > 
> > This whole thing could simply be a part of the main script body (i.e.
> > you don't need a helper function that's only called once)
> > 
> > --D
> 
> Ok, I will collapse this one down.  Thx!
> 
> Allison
> 
> > 
> > > +{
> > > +	echo "*** create FS"
> > > +
> > > +	rm -f $seqfull
> > > +	_scratch_unmount >/dev/null 2>&1
> > > +
> > > +	_scratch_mkfs_xfs -f -n parent=1 -p $protofile >>$seqfull 2>&1 \
> > > +		|| _fail "mkfs failed"
> > > +	echo "*** check FS"
> > > +	_check_scratch_fs
> > > +
> > > +	echo "*** mount FS"
> > > +	_full " mount"
> > > +	_scratch_mount >>$seqfull 2>&1 \
> > > +		|| _fail "mount failed"
> > > +
> > > +	TESTFOLDER1="testfolder1"
> > > +	TESTFOLDER2="testfolder2"
> > > +	FILE1="file1"
> > > +	FILE2="file2"
> > > +	FILE3="file3"
> > > +	FILE4="file4"
> > > +	FILE5="file5"
> > > +	FILE1_LN="file1_link"
> > > +
> > > +	echo ""
> > > +	echo "Create parent pointer test"
> > > +	verify_parent "$TESTFOLDER1" "$FILE1" "$TESTFOLDER1/$FILE1"
> > > +
> > > +	echo ""
> > > +	echo "Move parent pointer test"
> > > +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1 $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> > > +	verify_parent "$TESTFOLDER2" "$FILE1" "$TESTFOLDER2/$FILE1"
> > > +
> > > +	echo ""
> > > +	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 ""
> > > +	echo "Remove hard link parent pointer test"
> > > +	rm $SCRATCH_MNT/$TESTFOLDER2/$FILE1
> > > +	verify_parent    "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE1_LN"
> > > +	verify_no_parent "$TESTFOLDER2" "$FILE1"    "$TESTFOLDER1/$FILE1_LN"
> > > +
> > > +	echo ""
> > > +	echo "Rename parent pointer test"
> > > +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> > > +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> > > +	verify_no_parent "$TESTFOLDER1" "$FILE1_LN" "$TESTFOLDER1/$FILE2"
> > > +
> > > +	echo ""
> > > +	echo "Over write parent pointer test"
> > > +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE3
> > > +	verify_parent    "$TESTFOLDER2" "$FILE3"    "$TESTFOLDER2/$FILE3"
> > > +	mv -f $SCRATCH_MNT/$TESTFOLDER2/$FILE3 $SCRATCH_MNT/$TESTFOLDER1/$FILE2
> > > +	verify_parent    "$TESTFOLDER1" "$FILE2"    "$TESTFOLDER1/$FILE2"
> > > +
> > > +
> > > +	echo ""
> > > +	echo "Multi link parent pointer test"
> > > +	NLINKS=100
> > > +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE1
> > > +	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
> > > +	echo "Multi unlink parent pointer test"
> > > +	for (( j=$NLINKS-1; j<=0; j-- )); do
> > > +		rm $SCRATCH_MNT/$TESTFOLDER1/$FILE1_LN.$j
> > > +		verify_no_parent "$TESTFOLDER1" "$FILE1_LN.$j" "$TESTFOLDER1/$FILE1"
> > > +	done
> > > +
> > > +
> > > +	echo ""
> > > +	echo "Error inject test"
> > > +
> > > +	echo "Create files"
> > > +	touch $SCRATCH_MNT/$TESTFOLDER1/$FILE4
> > > +	verify_parent    "$TESTFOLDER1" "$FILE4" "$TESTFOLDER1/$FILE4"
> > > +
> > > +	echo "Inject error"
> > > +	_scratch_inject_error "delayed_attr"
> > > +
> > > +	echo "Move files"
> > > +	mv $SCRATCH_MNT/$TESTFOLDER1/$FILE4 $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> > > +
> > > +	echo "FS should be shut down, touch will fail"
> > > +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5 2>&1 | _filter_scratch
> > > +
> > > +	echo "Remount to replay log"
> > > +	_scratch_inject_logprint >> $seqres.full
> > > +
> > > +	echo "FS should be online, touch should succeed"
> > > +	touch $SCRATCH_MNT/$TESTFOLDER2/$FILE5
> > > +
> > > +	echo "Check files again"
> > > +	verify_parent    "$TESTFOLDER2" "$FILE5" "$TESTFOLDER2/$FILE5"
> > > +
> > > +	echo "*** unmount FS"
> > > +	_full "umount"
> > > +	_scratch_unmount >>$seqfull 2>&1 \
> > > +		|| _fail "umount failed"
> > > +
> > > +}
> > > +
> > > +verify_fs
> > > +
> > > +echo "*** done"
> > > +rm $seqfull
> > > +status=0
> > > +
> > > +# success, all done
> > > +status=0
> > > +exit
> > > diff --git a/tests/xfs/448.out b/tests/xfs/448.out
> > > new file mode 100644
> > > index 0000000..ccb2d4e
> > > --- /dev/null
> > > +++ b/tests/xfs/448.out
> > > @@ -0,0 +1,1096 @@
> > > +QA output created by 448
> > > +Silence is golden.
> > > +Wrote 2048.00Kb (value 0x2c)
> > > +*** create FS
> > > +*** check FS
> > > +*** mount FS
> > > +
> > > +Create parent pointer test
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +
> > > +Move parent pointer test
> > > +*** testfolder2 OK
> > > +*** testfolder2/file1 OK
> > > +*** testfolder2/file1 OK
> > > +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> > > +
> > > +Hard link parent pointer test
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link OK
> > > +*** testfolder1/file1_link OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> > > +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder2/file1 OK
> > > +*** testfolder1/file1_link OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> > > +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> > > +*** testfolder2 OK
> > > +*** testfolder1/file1_link OK
> > > +*** testfolder2/file1 OK
> > > +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> > > +*** testfolder2 OK
> > > +*** testfolder2/file1 OK
> > > +*** testfolder2/file1 OK
> > > +*** Verified parent pointer: inode:33613312, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder2/file1 inode:16777345
> > > +
> > > +Remove hard link parent pointer test
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link OK
> > > +*** testfolder1/file1_link OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link, namelen:10
> > > +*** Parent pointer OK for child testfolder1/file1_link inode:16777345
> > > +*** testfolder1/file1_link OK
> > > +
> > > +Rename parent pointer test
> > > +*** testfolder1 OK
> > > +*** testfolder1/file2 OK
> > > +*** testfolder1/file2 OK
> > > +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file2 inode:16777345
> > > +*** testfolder1/file2 OK
> > > +
> > > +Over write parent pointer test
> > > +*** testfolder2 OK
> > > +*** testfolder2/file3 OK
> > > +*** testfolder2/file3 OK
> > > +*** Verified parent pointer: inode:33613312, name:file3, namelen:5
> > > +*** Parent pointer OK for child testfolder2/file3 inode:33613314
> > > +*** testfolder1 OK
> > > +*** testfolder1/file2 OK
> > > +*** testfolder1/file2 OK
> > > +*** Verified parent pointer: inode:16777344, name:file2, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file2 inode:33613314
> > > +
> > > +Multi link parent pointer test
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.0 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.0, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.0 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.0 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.1, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.1 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.2 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.2, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.2 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.2 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.3 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.3, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.3 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.3 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.4 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.4, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.4 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.4 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.5 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.5, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.5 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.5 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.6 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.6, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.6 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.6 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.7 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.7, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.7 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.7 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.8 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.8, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.8 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.8 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.9 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.9, namelen:12
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.9 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.9 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.10 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.10, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.10 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.10 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.11 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.11, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.11 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.11 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.12 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.12, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.12 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.12 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.13 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.13, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.13 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.13 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.14 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.14, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.14 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.14 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.15 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.15, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.15 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.15 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.16 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.16, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.16 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.16 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.17 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.17, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.17 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.17 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.18 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.18, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.18 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.18 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.19 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.19, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.19 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.19 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.20 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.20, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.20 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.20 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.21 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.21, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.21 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.21 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.22 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.22, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.22 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.22 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.23 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.23, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.23 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.23 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.24 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.24, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.24 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.24 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.25 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.25, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.25 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.25 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.26 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.26, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.26 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.26 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.27 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.27, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.27 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.27 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.28 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.28, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.28 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.28 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.29 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.29, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.29 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.29 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.30 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.30, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.30 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.30 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.31 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.31, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.31 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.31 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.32 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.32, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.32 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.32 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.33 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.33, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.33 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.33 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.34 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.34, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.34 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.34 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.35 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.35, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.35 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.35 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.36 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.36, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.36 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.36 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.37 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.37, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.37 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.37 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.38 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.38, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.38 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.38 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.39 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.39, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.39 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.39 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.40 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.40, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.40 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.40 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.41 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.41, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.41 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.41 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.42 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.42, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.42 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.42 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.43 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.43, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.43 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.43 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.44 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.44, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.44 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.44 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.45 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.45, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.45 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.45 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.46 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.46, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.46 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.46 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.47 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.47, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.47 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.47 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.48 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.48, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.48 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.48 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.49 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.49, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.49 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.49 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.50 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.50, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.50 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.50 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.51 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.51, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.51 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.51 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.52 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.52, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.52 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.52 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.53 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.53, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.53 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.53 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.54 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.54, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.54 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.54 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.55 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.55, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.55 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.55 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.56 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.56, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.56 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.56 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.57 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.57, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.57 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.57 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.58 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.58, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.58 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.58 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.59 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.59, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.59 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.59 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.60 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.60, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.60 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.60 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.61 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.61, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.61 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.61 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.62 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.62, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.62 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.62 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.63 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.63, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.63 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.63 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.64 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.64, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.64 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.64 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.65 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.65, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.65 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.65 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.66 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.66, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.66 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.66 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.67 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.67, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.67 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.67 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.68 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.68, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.68 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.68 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.69 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.69, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.69 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.69 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.70 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.70, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.70 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.70 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.71 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.71, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.71 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.71 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.72 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.72, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.72 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.72 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.73 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.73, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.73 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.73 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.74 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.74, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.74 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.74 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.75 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.75, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.75 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.75 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.76 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.76, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.76 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.76 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.77 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.77, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.77 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.77 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.78 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.78, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.78 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.78 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.79 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.79, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.79 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.79 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.80 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.80, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.80 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.80 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.81 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.81, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.81 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.81 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.82 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.82, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.82 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.82 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.83 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.83, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.83 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.83 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.84 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.84, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.84 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.84 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.85 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.85, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.85 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.85 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.86 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.86, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.86 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.86 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.87 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.87, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.87 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.87 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.88 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.88, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.88 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.88 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.89 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.89, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.89 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.89 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.90 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.90, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.90 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.90 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.91 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.91, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.91 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.91 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.92 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.92, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.92 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.92 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.93 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.93, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.93 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.93 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.94 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.94, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.94 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.94 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.95 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.95, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.95 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.95 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.96 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.96, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.96 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.96 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.97 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.97, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.97 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.97 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.98 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.98, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.98 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.98 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1 OK
> > > +*** testfolder1/file1_link.99 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1_link.99, namelen:13
> > > +*** Parent pointer OK for child testfolder1/file1 inode:16777345
> > > +*** testfolder1 OK
> > > +*** testfolder1/file1_link.99 OK
> > > +*** testfolder1/file1 OK
> > > +*** Verified parent pointer: inode:16777344, name:file1, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file1_link.99 inode:16777345
> > > +Multi unlink parent pointer test
> > > +
> > > +Error inject test
> > > +Create files
> > > +*** testfolder1 OK
> > > +*** testfolder1/file4 OK
> > > +*** testfolder1/file4 OK
> > > +*** Verified parent pointer: inode:16777344, name:file4, namelen:5
> > > +*** Parent pointer OK for child testfolder1/file4 inode:16777346
> > > +Inject error
> > > +Move files
> > > +mv: cannot move '/mnt/scratch/testfolder1/file4' to '/mnt/scratch/testfolder2/file5': Input/output error
> > > +FS should be shut down, touch will fail
> > > +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
> > > +Remount to replay log
> > > +FS should be online, touch should succeed
> > > +Check files again
> > > +*** testfolder2 OK
> > > +*** testfolder2/file5 OK
> > > +*** testfolder2/file5 OK
> > > +*** Verified parent pointer: inode:33613312, name:file5, namelen:5
> > > +*** Parent pointer OK for child testfolder2/file5 inode:16777346
> > > +*** unmount FS
> > > +*** done
> > > diff --git a/tests/xfs/group b/tests/xfs/group
> > > index 2319f58..fb74e82 100644
> > > --- a/tests/xfs/group
> > > +++ b/tests/xfs/group
> > > @@ -445,3 +445,4 @@
> > >   445 auto quick filestreams
> > >   446 auto quick
> > >   447 auto mount
> > > +448 auto
> > > -- 
> > > 2.7.4
> > > 
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> > > the body of a message to majordomo@vger.kernel.org
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-09-23  0:53       ` Zorro Lang
@ 2022-09-27  1:16         ` Catherine Hoang
  0 siblings, 0 replies; 20+ messages in thread
From: Catherine Hoang @ 2022-09-27  1:16 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Allison Henderson, fstests, linux-xfs

> On Sep 22, 2022, at 5:53 PM, Zorro Lang <zlang@redhat.com> wrote:
> 
> On Thu, Sep 22, 2022 at 06:45:09PM +0000, Allison Henderson wrote:
>> On Fri, 2022-09-23 at 00:37 +0800, Zorro Lang wrote:
>>> On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
>>>> From: Allison Henderson <allison.henderson@oracle.com>
>>>> 
>>>> This patch adds a test for basic parent pointer operations,
>>>> including link, unlink, rename, overwrite, hardlinks and
>>>> error inject.
>>>> 
>>>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>>>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>>>> ---
>>>>  common/parent       |  196 +++++++++
>>>>  common/rc           |    3 +
>>>>  doc/group-names.txt |    1 +
>>>>  tests/xfs/547       |  126 ++++++
>>>>  tests/xfs/547.out   |   59 +++
>>>>  tests/xfs/548       |   97 +++++
>>>>  tests/xfs/548.out   | 1002
>>>> +++++++++++++++++++++++++++++++++++++++++++
>>>>  tests/xfs/549       |  110 +++++
>>>>  tests/xfs/549.out   |   14 +
>>>>  9 files changed, 1608 insertions(+)
>>>>  create mode 100644 common/parent
>>>>  create mode 100755 tests/xfs/547
>>>>  create mode 100644 tests/xfs/547.out
>>>>  create mode 100755 tests/xfs/548
>>>>  create mode 100644 tests/xfs/548.out
>>>>  create mode 100755 tests/xfs/549
>>>>  create mode 100644 tests/xfs/549.out
>>>> 
>>>> diff --git a/common/parent b/common/parent
>>>> new file mode 100644
>>>> index 00000000..0af12553
>>>> --- /dev/null
>>>> +++ b/common/parent
>>>> @@ -0,0 +1,196 @@
>>>> +#
>>>> +# 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
>>>> +               _fail "Bad parent pointer reclen"
>>>> +       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()
>>>> +{
>>>> +
> 
> useless empty line ^^
> 
>>>> +       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()
>>>> +{
>>>> +
> 
> empty line at beginning too, is it a code style?

Will remove these lines, thanks for catching that.
> 
>>>> +       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))
>>> 
>>> I didn't see anywhere (in this patch) call `_require_xfs_io_command
>>> parent`.
>>> Shouldn't we make sure the "parent" feature is support by userspace
>>> and
>>> kernel both?
>> Sure, I think you're right, we can add "_require_xfs_io_command parent"
>> at the top of the tests
> 
> Thanks, by the way, can you separate this patch to 3~4 patches as a patchset,
> it's a little hard for me to go through this long patch and page up and down
> to review sometimes :)

Sure, I’ll split up these tests next time.
> 
>> 
>>> 
>>>> +       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 4201a059..68752cdc 100644
>>>> --- a/common/rc
>>>> +++ b/common/rc
>>>> @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
>>>> index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
>>>> new file mode 100755
>>>> index 00000000..5c7d1d45
>>>> --- /dev/null
>>>> +++ b/tests/xfs/547
>>>> @@ -0,0 +1,126 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>>> Reserved.
>>>> +#
>>>> +# FS QA Test 547
>>>> +#
>>>> +# simple parent pointer test
>>>> +#
>>>> +
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +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"
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
> 
> I remembered last time you backup the value of the xfs/debug/larp, then restore
> it in cleanup, refer to xfs/018 (it might be recommended by Dave?).
> 
>>>> +
>>>> +# 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"
>>> 
>>> I think we'd better to check if current fs userspace and kernel
>>> support
>>> "parent" feature. If it's supported, then we should report failure if
>>> mkfs fails. Or we should skip the test before real testing start.
>>> (same
>>> below)
>> Alrighty, we can add a _require_xfs_mkfs_parent function over in
>> common/xfs
> 
> I'm wondering if old kernel can mount xfs with "parent=1"? If not, we need
> a _require_xfs_parent. For example we have below 3 function in common/xfs:
> 
> _require_xfs_mkfs_crc : check if current mkfs.xfs support crc=1 option
> _require_xfs_crc : check if current kernel can mount a xfs with crc=1
> _require_scratch_xfs_crc : check if current SCRATCH_DEV is crc enabled
> 
> As the parent feature isn't big as crc feature, so I think you can refer
> to _require_xfs_sparse_inodes or _require_xfs_nrext64, check mkfs and kernel
> support parent feature in one function. Then you can use:
> 
>  _require_xfs_parent # check mkfs and kernel/mount support parent feature
>  _require_xfs_io_command parent # check if xfs_io support parent command
> 
> at the beginning of each cases.

Ok, that makes sense. I’ll add those functions. Thanks for the explanation!
> 
> 
> 
> Thanks,
> Zorro
> 
>> 
>> Thanks for the reviews!
>> Allison
>> 
>>> 
>>> Thanks,
>>> Zorro
>>> 
>>>> +_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/547.out b/tests/xfs/547.out
>>>> new file mode 100644
>>>> index 00000000..e0ce9e65
>>>> --- /dev/null
>>>> +++ b/tests/xfs/547.out
>>>> @@ -0,0 +1,59 @@
>>>> +QA output created by 547
>>>> +
>>>> +*** 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
>>>> diff --git a/tests/xfs/548 b/tests/xfs/548
>>>> new file mode 100755
>>>> index 00000000..229d871a
>>>> --- /dev/null
>>>> +++ b/tests/xfs/548
>>>> @@ -0,0 +1,97 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>>> Reserved.
>>>> +#
>>>> +# FS QA Test 548
>>>> +#
>>>> +# multi link parent pointer test
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +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
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
>>>> +
>>>> +# 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/548.out b/tests/xfs/548.out
>>>> new file mode 100644
>>>> index 00000000..afdc083b
>>>> --- /dev/null
>>>> +++ b/tests/xfs/548.out
>>>> @@ -0,0 +1,1002 @@
>>>> +QA output created by 548
>>>> +
>>>> +*** 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
>>>> diff --git a/tests/xfs/549 b/tests/xfs/549
>>>> new file mode 100755
>>>> index 00000000..e8e74b8a
>>>> --- /dev/null
>>>> +++ b/tests/xfs/549
>>>> @@ -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 549
>>>> +#
>>>> +# parent pointer inject test
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +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"
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
>>>> +
>>>> +# 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/549.out b/tests/xfs/549.out
>>>> new file mode 100644
>>>> index 00000000..1af49c73
>>>> --- /dev/null
>>>> +++ b/tests/xfs/549.out
>>>> @@ -0,0 +1,14 @@
>>>> +QA output created by 549
>>>> +
>>>> +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-09-26 21:51     ` Allison Henderson
@ 2022-09-27  1:03       ` Catherine Hoang
  0 siblings, 0 replies; 20+ messages in thread
From: Catherine Hoang @ 2022-09-27  1:03 UTC (permalink / raw)
  To: Allison Henderson; +Cc: djwong, fstests, linux-xfs

> On Sep 26, 2022, at 2:51 PM, Allison Henderson <allison.henderson@oracle.com> wrote:
> 
> On Fri, 2022-09-23 at 17:49 -0700, Darrick J. Wong wrote:
>> On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
>>> From: Allison Henderson <allison.henderson@oracle.com>
>>> 
>>> This patch adds a test for basic parent pointer operations,
>>> including link, unlink, rename, overwrite, hardlinks and
>>> error inject.
>>> 
>>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>>> ---
>>>  common/parent       |  196 +++++++++
>>>  common/rc           |    3 +
>>>  doc/group-names.txt |    1 +
>>>  tests/xfs/547       |  126 ++++++
>>>  tests/xfs/547.out   |   59 +++
>>>  tests/xfs/548       |   97 +++++
>>>  tests/xfs/548.out   | 1002
>>> +++++++++++++++++++++++++++++++++++++++++++
>>>  tests/xfs/549       |  110 +++++
>>>  tests/xfs/549.out   |   14 +
>>>  9 files changed, 1608 insertions(+)
>>>  create mode 100644 common/parent
>>>  create mode 100755 tests/xfs/547
>>>  create mode 100644 tests/xfs/547.out
>>>  create mode 100755 tests/xfs/548
>>>  create mode 100644 tests/xfs/548.out
>>>  create mode 100755 tests/xfs/549
>>>  create mode 100644 tests/xfs/549.out
>>> 
>>> diff --git a/common/parent b/common/parent
>>> new file mode 100644
>>> index 00000000..0af12553
>>> --- /dev/null
>>> +++ b/common/parent
>>> @@ -0,0 +1,196 @@
>>> +#
>>> +# 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
>>> +               _fail "Bad parent pointer reclen"
>> 
>> Do you really want to _fail the whole test immediately?  Or simply
>> let
>> the golden output comparison mark the test failed because there's
>> unexpected output from "echo 'bad parent pointer reclen'" ?
> I think it wouldnt be a bad idea to print out what the name and length
> are vs what they were expected to be.  Since that will only print
> during a test fail anyway, I think that's clearer than having to go
> pour through the diff output.

That makes sense, I’ll add those print statements.
> 
>> 
>>> +       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 4201a059..68752cdc 100644
>>> --- a/common/rc
>>> +++ b/common/rc
>>> @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
>>> index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
>>> new file mode 100755
>>> index 00000000..5c7d1d45
>>> --- /dev/null
>>> +++ b/tests/xfs/547
>>> @@ -0,0 +1,126 @@
>>> +#! /bin/bash
>>> +# SPDX-License-Identifier: GPL-2.0
>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>> Reserved.
>>> +#
>>> +# FS QA Test 547
>>> +#
>>> +# simple parent pointer test
>>> +#
>>> +
>>> +. ./common/preamble
>>> +_begin_fstest auto quick parent
>>> +
>>> +cleanup()
>>> +{
>>> +       cd /
>>> +       rm -f $tmp.*
>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>> +}
>>> +
>>> +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"
>>> +
>>> +echo 1 > /sys/fs/xfs/debug/larp
>> 
>> Doesn't the parent pointer code turn on LARP mode automatically?
>> Why does the test need to do that explicitly?
> I think it does now.  We went through a couple different
> implementations of larp knobs and at some point it really wasn't
> reasonable to continue pushing out all the resulting changes that would
> ripple through not only usr space but all the test cases as well.  I
> think thats setting down now, so I think it's ok for this line to come
> out.

Ok, will remove this. Thanks!
> 
>> 
>>> +
>>> +# 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/547.out b/tests/xfs/547.out
>>> new file mode 100644
>>> index 00000000..e0ce9e65
>>> --- /dev/null
>>> +++ b/tests/xfs/547.out
>>> @@ -0,0 +1,59 @@
>>> +QA output created by 547
>>> +
>>> +*** 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
>>> diff --git a/tests/xfs/548 b/tests/xfs/548
>>> new file mode 100755
>>> index 00000000..229d871a
>>> --- /dev/null
>>> +++ b/tests/xfs/548
>>> @@ -0,0 +1,97 @@
>>> +#! /bin/bash
>>> +# SPDX-License-Identifier: GPL-2.0
>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>> Reserved.
>>> +#
>>> +# FS QA Test 548
>>> +#
>>> +# multi link parent pointer test
>>> +#
>>> +. ./common/preamble
>>> +_begin_fstest auto quick parent
>>> +
>>> +cleanup()
>>> +{
>>> +       cd /
>>> +       rm -f $tmp.*
>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>> +}
>>> +
>>> +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
>>> +
>>> +echo 1 > /sys/fs/xfs/debug/larp
>>> +
>>> +# 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/548.out b/tests/xfs/548.out
>>> new file mode 100644
>>> index 00000000..afdc083b
>>> --- /dev/null
>>> +++ b/tests/xfs/548.out
>>> @@ -0,0 +1,1002 @@
>>> +QA output created by 548
>>> +
>>> +*** testfolder1 OK
>> 
>> <snip>
>> 
>>> +*** 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
>>> diff --git a/tests/xfs/549 b/tests/xfs/549
>>> new file mode 100755
>>> index 00000000..e8e74b8a
>>> --- /dev/null
>>> +++ b/tests/xfs/549
>>> @@ -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 549
>>> +#
>>> +# parent pointer inject test
>>> +#
>>> +. ./common/preamble
>>> +_begin_fstest auto quick parent
>>> +
>>> +cleanup()
>>> +{
>>> +       cd /
>>> +       rm -f $tmp.*
>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>> +}
>>> +
>>> +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"
>>> +
>>> +echo 1 > /sys/fs/xfs/debug/larp
>>> +
>>> +# real QA test starts here
>>> +
>>> +# Create a directory tree using a protofile and
>>> +# make sure all inodes created have parent pointers
>> 
>> Looks like we're testing the error injection knobs too?
> Yes, this is similar to the larp replay tests except we ensure the
> replayed attr contains the expected pptr
> 
>> 
>> --D
>> 
>>> +
>>> +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/549.out b/tests/xfs/549.out
>>> new file mode 100644
>>> index 00000000..1af49c73
>>> --- /dev/null
>>> +++ b/tests/xfs/549.out
>>> @@ -0,0 +1,14 @@
>>> +QA output created by 549
>>> +
>>> +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-09-24  0:49   ` Darrick J. Wong
@ 2022-09-26 21:51     ` Allison Henderson
  2022-09-27  1:03       ` Catherine Hoang
  0 siblings, 1 reply; 20+ messages in thread
From: Allison Henderson @ 2022-09-26 21:51 UTC (permalink / raw)
  To: djwong, Catherine Hoang; +Cc: fstests, linux-xfs

On Fri, 2022-09-23 at 17:49 -0700, Darrick J. Wong wrote:
> On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
> > From: Allison Henderson <allison.henderson@oracle.com>
> > 
> > This patch adds a test for basic parent pointer operations,
> > including link, unlink, rename, overwrite, hardlinks and
> > error inject.
> > 
> > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > ---
> >  common/parent       |  196 +++++++++
> >  common/rc           |    3 +
> >  doc/group-names.txt |    1 +
> >  tests/xfs/547       |  126 ++++++
> >  tests/xfs/547.out   |   59 +++
> >  tests/xfs/548       |   97 +++++
> >  tests/xfs/548.out   | 1002
> > +++++++++++++++++++++++++++++++++++++++++++
> >  tests/xfs/549       |  110 +++++
> >  tests/xfs/549.out   |   14 +
> >  9 files changed, 1608 insertions(+)
> >  create mode 100644 common/parent
> >  create mode 100755 tests/xfs/547
> >  create mode 100644 tests/xfs/547.out
> >  create mode 100755 tests/xfs/548
> >  create mode 100644 tests/xfs/548.out
> >  create mode 100755 tests/xfs/549
> >  create mode 100644 tests/xfs/549.out
> > 
> > diff --git a/common/parent b/common/parent
> > new file mode 100644
> > index 00000000..0af12553
> > --- /dev/null
> > +++ b/common/parent
> > @@ -0,0 +1,196 @@
> > +#
> > +# 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
> > +               _fail "Bad parent pointer reclen"
> 
> Do you really want to _fail the whole test immediately?  Or simply
> let
> the golden output comparison mark the test failed because there's
> unexpected output from "echo 'bad parent pointer reclen'" ?
I think it wouldnt be a bad idea to print out what the name and length
are vs what they were expected to be.  Since that will only print
during a test fail anyway, I think that's clearer than having to go
pour through the diff output.
 
> 
> > +       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 4201a059..68752cdc 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> > index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> > new file mode 100755
> > index 00000000..5c7d1d45
> > --- /dev/null
> > +++ b/tests/xfs/547
> > @@ -0,0 +1,126 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > Reserved.
> > +#
> > +# FS QA Test 547
> > +#
> > +# simple parent pointer test
> > +#
> > +
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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"
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> 
> Doesn't the parent pointer code turn on LARP mode automatically?
> Why does the test need to do that explicitly?
I think it does now.  We went through a couple different
implementations of larp knobs and at some point it really wasn't
reasonable to continue pushing out all the resulting changes that would
ripple through not only usr space but all the test cases as well.  I
think thats setting down now, so I think it's ok for this line to come
out.

> 
> > +
> > +# 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/547.out b/tests/xfs/547.out
> > new file mode 100644
> > index 00000000..e0ce9e65
> > --- /dev/null
> > +++ b/tests/xfs/547.out
> > @@ -0,0 +1,59 @@
> > +QA output created by 547
> > +
> > +*** 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
> > diff --git a/tests/xfs/548 b/tests/xfs/548
> > new file mode 100755
> > index 00000000..229d871a
> > --- /dev/null
> > +++ b/tests/xfs/548
> > @@ -0,0 +1,97 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > Reserved.
> > +#
> > +# FS QA Test 548
> > +#
> > +# multi link parent pointer test
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> > +
> > +# 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/548.out b/tests/xfs/548.out
> > new file mode 100644
> > index 00000000..afdc083b
> > --- /dev/null
> > +++ b/tests/xfs/548.out
> > @@ -0,0 +1,1002 @@
> > +QA output created by 548
> > +
> > +*** testfolder1 OK
> 
> <snip>
> 
> > +*** 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
> > diff --git a/tests/xfs/549 b/tests/xfs/549
> > new file mode 100755
> > index 00000000..e8e74b8a
> > --- /dev/null
> > +++ b/tests/xfs/549
> > @@ -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 549
> > +#
> > +# parent pointer inject test
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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"
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> > +
> > +# real QA test starts here
> > +
> > +# Create a directory tree using a protofile and
> > +# make sure all inodes created have parent pointers
> 
> Looks like we're testing the error injection knobs too?
Yes, this is similar to the larp replay tests except we ensure the
replayed attr contains the expected pptr

> 
> --D
> 
> > +
> > +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/549.out b/tests/xfs/549.out
> > new file mode 100644
> > index 00000000..1af49c73
> > --- /dev/null
> > +++ b/tests/xfs/549.out
> > @@ -0,0 +1,14 @@
> > +QA output created by 549
> > +
> > +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-06-14 22:01 ` [PATCH v1 1/1] xfstests: Add parent pointer test Catherine Hoang
  2022-09-22  5:53   ` Allison Henderson
  2022-09-22 16:37   ` Zorro Lang
@ 2022-09-24  0:49   ` Darrick J. Wong
  2022-09-26 21:51     ` Allison Henderson
  2 siblings, 1 reply; 20+ messages in thread
From: Darrick J. Wong @ 2022-09-24  0:49 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> This patch adds a test for basic parent pointer operations,
> including link, unlink, rename, overwrite, hardlinks and
> error inject.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  common/parent       |  196 +++++++++
>  common/rc           |    3 +
>  doc/group-names.txt |    1 +
>  tests/xfs/547       |  126 ++++++
>  tests/xfs/547.out   |   59 +++
>  tests/xfs/548       |   97 +++++
>  tests/xfs/548.out   | 1002 +++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/549       |  110 +++++
>  tests/xfs/549.out   |   14 +
>  9 files changed, 1608 insertions(+)
>  create mode 100644 common/parent
>  create mode 100755 tests/xfs/547
>  create mode 100644 tests/xfs/547.out
>  create mode 100755 tests/xfs/548
>  create mode 100644 tests/xfs/548.out
>  create mode 100755 tests/xfs/549
>  create mode 100644 tests/xfs/549.out
> 
> diff --git a/common/parent b/common/parent
> new file mode 100644
> index 00000000..0af12553
> --- /dev/null
> +++ b/common/parent
> @@ -0,0 +1,196 @@
> +#
> +# 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
> +		_fail "Bad parent pointer reclen"

Do you really want to _fail the whole test immediately?  Or simply let
the golden output comparison mark the test failed because there's
unexpected output from "echo 'bad parent pointer reclen'" ?

> +	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 4201a059..68752cdc 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> new file mode 100755
> index 00000000..5c7d1d45
> --- /dev/null
> +++ b/tests/xfs/547
> @@ -0,0 +1,126 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 547
> +#
> +# simple parent pointer test
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp

Doesn't the parent pointer code turn on LARP mode automatically?
Why does the test need to do that explicitly?

> +
> +# 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/547.out b/tests/xfs/547.out
> new file mode 100644
> index 00000000..e0ce9e65
> --- /dev/null
> +++ b/tests/xfs/547.out
> @@ -0,0 +1,59 @@
> +QA output created by 547
> +
> +*** 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
> diff --git a/tests/xfs/548 b/tests/xfs/548
> new file mode 100755
> index 00000000..229d871a
> --- /dev/null
> +++ b/tests/xfs/548
> @@ -0,0 +1,97 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 548
> +#
> +# multi link parent pointer test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/548.out b/tests/xfs/548.out
> new file mode 100644
> index 00000000..afdc083b
> --- /dev/null
> +++ b/tests/xfs/548.out
> @@ -0,0 +1,1002 @@
> +QA output created by 548
> +
> +*** testfolder1 OK

<snip>

> +*** 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
> diff --git a/tests/xfs/549 b/tests/xfs/549
> new file mode 100755
> index 00000000..e8e74b8a
> --- /dev/null
> +++ b/tests/xfs/549
> @@ -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 549
> +#
> +# parent pointer inject test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# real QA test starts here
> +
> +# Create a directory tree using a protofile and
> +# make sure all inodes created have parent pointers

Looks like we're testing the error injection knobs too?

--D

> +
> +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/549.out b/tests/xfs/549.out
> new file mode 100644
> index 00000000..1af49c73
> --- /dev/null
> +++ b/tests/xfs/549.out
> @@ -0,0 +1,14 @@
> +QA output created by 549
> +
> +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-09-22 18:45     ` Allison Henderson
@ 2022-09-23  0:53       ` Zorro Lang
  2022-09-27  1:16         ` Catherine Hoang
  0 siblings, 1 reply; 20+ messages in thread
From: Zorro Lang @ 2022-09-23  0:53 UTC (permalink / raw)
  To: Allison Henderson; +Cc: Catherine Hoang, fstests, linux-xfs

On Thu, Sep 22, 2022 at 06:45:09PM +0000, Allison Henderson wrote:
> On Fri, 2022-09-23 at 00:37 +0800, Zorro Lang wrote:
> > On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
> > > From: Allison Henderson <allison.henderson@oracle.com>
> > > 
> > > This patch adds a test for basic parent pointer operations,
> > > including link, unlink, rename, overwrite, hardlinks and
> > > error inject.
> > > 
> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > > ---
> > >  common/parent       |  196 +++++++++
> > >  common/rc           |    3 +
> > >  doc/group-names.txt |    1 +
> > >  tests/xfs/547       |  126 ++++++
> > >  tests/xfs/547.out   |   59 +++
> > >  tests/xfs/548       |   97 +++++
> > >  tests/xfs/548.out   | 1002
> > > +++++++++++++++++++++++++++++++++++++++++++
> > >  tests/xfs/549       |  110 +++++
> > >  tests/xfs/549.out   |   14 +
> > >  9 files changed, 1608 insertions(+)
> > >  create mode 100644 common/parent
> > >  create mode 100755 tests/xfs/547
> > >  create mode 100644 tests/xfs/547.out
> > >  create mode 100755 tests/xfs/548
> > >  create mode 100644 tests/xfs/548.out
> > >  create mode 100755 tests/xfs/549
> > >  create mode 100644 tests/xfs/549.out
> > > 
> > > diff --git a/common/parent b/common/parent
> > > new file mode 100644
> > > index 00000000..0af12553
> > > --- /dev/null
> > > +++ b/common/parent
> > > @@ -0,0 +1,196 @@
> > > +#
> > > +# 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
> > > +               _fail "Bad parent pointer reclen"
> > > +       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()
> > > +{
> > > +

useless empty line ^^

> > > +       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()
> > > +{
> > > +

empty line at beginning too, is it a code style?

> > > +       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))
> > 
> > I didn't see anywhere (in this patch) call `_require_xfs_io_command
> > parent`.
> > Shouldn't we make sure the "parent" feature is support by userspace
> > and
> > kernel both?
> Sure, I think you're right, we can add "_require_xfs_io_command parent"
> at the top of the tests

Thanks, by the way, can you separate this patch to 3~4 patches as a patchset,
it's a little hard for me to go through this long patch and page up and down
to review sometimes :)

> 
> > 
> > > +       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 4201a059..68752cdc 100644
> > > --- a/common/rc
> > > +++ b/common/rc
> > > @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> > > index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> > > new file mode 100755
> > > index 00000000..5c7d1d45
> > > --- /dev/null
> > > +++ b/tests/xfs/547
> > > @@ -0,0 +1,126 @@
> > > +#! /bin/bash
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > > Reserved.
> > > +#
> > > +# FS QA Test 547
> > > +#
> > > +# simple parent pointer test
> > > +#
> > > +
> > > +. ./common/preamble
> > > +_begin_fstest auto quick parent
> > > +
> > > +cleanup()
> > > +{
> > > +       cd /
> > > +       rm -f $tmp.*
> > > +       echo 0 > /sys/fs/xfs/debug/larp
> > > +}
> > > +
> > > +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"
> > > +
> > > +echo 1 > /sys/fs/xfs/debug/larp

I remembered last time you backup the value of the xfs/debug/larp, then restore
it in cleanup, refer to xfs/018 (it might be recommended by Dave?).

> > > +
> > > +# 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"
> > 
> > I think we'd better to check if current fs userspace and kernel
> > support
> > "parent" feature. If it's supported, then we should report failure if
> > mkfs fails. Or we should skip the test before real testing start.
> > (same
> > below)
> Alrighty, we can add a _require_xfs_mkfs_parent function over in
> common/xfs

I'm wondering if old kernel can mount xfs with "parent=1"? If not, we need
a _require_xfs_parent. For example we have below 3 function in common/xfs:

_require_xfs_mkfs_crc : check if current mkfs.xfs support crc=1 option
_require_xfs_crc : check if current kernel can mount a xfs with crc=1
_require_scratch_xfs_crc : check if current SCRATCH_DEV is crc enabled

As the parent feature isn't big as crc feature, so I think you can refer
to _require_xfs_sparse_inodes or _require_xfs_nrext64, check mkfs and kernel
support parent feature in one function. Then you can use:

  _require_xfs_parent # check mkfs and kernel/mount support parent feature
  _require_xfs_io_command parent # check if xfs_io support parent command

at the beginning of each cases.



Thanks,
Zorro

> 
> Thanks for the reviews!
> Allison
> 
> > 
> > Thanks,
> > Zorro
> > 
> > > +_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/547.out b/tests/xfs/547.out
> > > new file mode 100644
> > > index 00000000..e0ce9e65
> > > --- /dev/null
> > > +++ b/tests/xfs/547.out
> > > @@ -0,0 +1,59 @@
> > > +QA output created by 547
> > > +
> > > +*** 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
> > > diff --git a/tests/xfs/548 b/tests/xfs/548
> > > new file mode 100755
> > > index 00000000..229d871a
> > > --- /dev/null
> > > +++ b/tests/xfs/548
> > > @@ -0,0 +1,97 @@
> > > +#! /bin/bash
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > > Reserved.
> > > +#
> > > +# FS QA Test 548
> > > +#
> > > +# multi link parent pointer test
> > > +#
> > > +. ./common/preamble
> > > +_begin_fstest auto quick parent
> > > +
> > > +cleanup()
> > > +{
> > > +       cd /
> > > +       rm -f $tmp.*
> > > +       echo 0 > /sys/fs/xfs/debug/larp
> > > +}
> > > +
> > > +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
> > > +
> > > +echo 1 > /sys/fs/xfs/debug/larp
> > > +
> > > +# 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/548.out b/tests/xfs/548.out
> > > new file mode 100644
> > > index 00000000..afdc083b
> > > --- /dev/null
> > > +++ b/tests/xfs/548.out
> > > @@ -0,0 +1,1002 @@
> > > +QA output created by 548
> > > +
> > > +*** 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
> > > diff --git a/tests/xfs/549 b/tests/xfs/549
> > > new file mode 100755
> > > index 00000000..e8e74b8a
> > > --- /dev/null
> > > +++ b/tests/xfs/549
> > > @@ -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 549
> > > +#
> > > +# parent pointer inject test
> > > +#
> > > +. ./common/preamble
> > > +_begin_fstest auto quick parent
> > > +
> > > +cleanup()
> > > +{
> > > +       cd /
> > > +       rm -f $tmp.*
> > > +       echo 0 > /sys/fs/xfs/debug/larp
> > > +}
> > > +
> > > +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"
> > > +
> > > +echo 1 > /sys/fs/xfs/debug/larp
> > > +
> > > +# 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/549.out b/tests/xfs/549.out
> > > new file mode 100644
> > > index 00000000..1af49c73
> > > --- /dev/null
> > > +++ b/tests/xfs/549.out
> > > @@ -0,0 +1,14 @@
> > > +QA output created by 549
> > > +
> > > +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-09-22 16:37   ` Zorro Lang
@ 2022-09-22 18:45     ` Allison Henderson
  2022-09-23  0:53       ` Zorro Lang
  0 siblings, 1 reply; 20+ messages in thread
From: Allison Henderson @ 2022-09-22 18:45 UTC (permalink / raw)
  To: Catherine Hoang, zlang; +Cc: fstests, linux-xfs

On Fri, 2022-09-23 at 00:37 +0800, Zorro Lang wrote:
> On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
> > From: Allison Henderson <allison.henderson@oracle.com>
> > 
> > This patch adds a test for basic parent pointer operations,
> > including link, unlink, rename, overwrite, hardlinks and
> > error inject.
> > 
> > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > ---
> >  common/parent       |  196 +++++++++
> >  common/rc           |    3 +
> >  doc/group-names.txt |    1 +
> >  tests/xfs/547       |  126 ++++++
> >  tests/xfs/547.out   |   59 +++
> >  tests/xfs/548       |   97 +++++
> >  tests/xfs/548.out   | 1002
> > +++++++++++++++++++++++++++++++++++++++++++
> >  tests/xfs/549       |  110 +++++
> >  tests/xfs/549.out   |   14 +
> >  9 files changed, 1608 insertions(+)
> >  create mode 100644 common/parent
> >  create mode 100755 tests/xfs/547
> >  create mode 100644 tests/xfs/547.out
> >  create mode 100755 tests/xfs/548
> >  create mode 100644 tests/xfs/548.out
> >  create mode 100755 tests/xfs/549
> >  create mode 100644 tests/xfs/549.out
> > 
> > diff --git a/common/parent b/common/parent
> > new file mode 100644
> > index 00000000..0af12553
> > --- /dev/null
> > +++ b/common/parent
> > @@ -0,0 +1,196 @@
> > +#
> > +# 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
> > +               _fail "Bad parent pointer reclen"
> > +       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))
> 
> I didn't see anywhere (in this patch) call `_require_xfs_io_command
> parent`.
> Shouldn't we make sure the "parent" feature is support by userspace
> and
> kernel both?
Sure, I think you're right, we can add "_require_xfs_io_command parent"
at the top of the tests

> 
> > +       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 4201a059..68752cdc 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> > index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> > new file mode 100755
> > index 00000000..5c7d1d45
> > --- /dev/null
> > +++ b/tests/xfs/547
> > @@ -0,0 +1,126 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > Reserved.
> > +#
> > +# FS QA Test 547
> > +#
> > +# simple parent pointer test
> > +#
> > +
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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"
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> > +
> > +# 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"
> 
> I think we'd better to check if current fs userspace and kernel
> support
> "parent" feature. If it's supported, then we should report failure if
> mkfs fails. Or we should skip the test before real testing start.
> (same
> below)
Alrighty, we can add a _require_xfs_mkfs_parent function over in
common/xfs

Thanks for the reviews!
Allison

> 
> Thanks,
> Zorro
> 
> > +_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/547.out b/tests/xfs/547.out
> > new file mode 100644
> > index 00000000..e0ce9e65
> > --- /dev/null
> > +++ b/tests/xfs/547.out
> > @@ -0,0 +1,59 @@
> > +QA output created by 547
> > +
> > +*** 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
> > diff --git a/tests/xfs/548 b/tests/xfs/548
> > new file mode 100755
> > index 00000000..229d871a
> > --- /dev/null
> > +++ b/tests/xfs/548
> > @@ -0,0 +1,97 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> > Reserved.
> > +#
> > +# FS QA Test 548
> > +#
> > +# multi link parent pointer test
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> > +
> > +# 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/548.out b/tests/xfs/548.out
> > new file mode 100644
> > index 00000000..afdc083b
> > --- /dev/null
> > +++ b/tests/xfs/548.out
> > @@ -0,0 +1,1002 @@
> > +QA output created by 548
> > +
> > +*** 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
> > diff --git a/tests/xfs/549 b/tests/xfs/549
> > new file mode 100755
> > index 00000000..e8e74b8a
> > --- /dev/null
> > +++ b/tests/xfs/549
> > @@ -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 549
> > +#
> > +# parent pointer inject test
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto quick parent
> > +
> > +cleanup()
> > +{
> > +       cd /
> > +       rm -f $tmp.*
> > +       echo 0 > /sys/fs/xfs/debug/larp
> > +}
> > +
> > +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"
> > +
> > +echo 1 > /sys/fs/xfs/debug/larp
> > +
> > +# 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/549.out b/tests/xfs/549.out
> > new file mode 100644
> > index 00000000..1af49c73
> > --- /dev/null
> > +++ b/tests/xfs/549.out
> > @@ -0,0 +1,14 @@
> > +QA output created by 549
> > +
> > +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-06-14 22:01 ` [PATCH v1 1/1] xfstests: Add parent pointer test Catherine Hoang
  2022-09-22  5:53   ` Allison Henderson
@ 2022-09-22 16:37   ` Zorro Lang
  2022-09-22 18:45     ` Allison Henderson
  2022-09-24  0:49   ` Darrick J. Wong
  2 siblings, 1 reply; 20+ messages in thread
From: Zorro Lang @ 2022-09-22 16:37 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> This patch adds a test for basic parent pointer operations,
> including link, unlink, rename, overwrite, hardlinks and
> error inject.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  common/parent       |  196 +++++++++
>  common/rc           |    3 +
>  doc/group-names.txt |    1 +
>  tests/xfs/547       |  126 ++++++
>  tests/xfs/547.out   |   59 +++
>  tests/xfs/548       |   97 +++++
>  tests/xfs/548.out   | 1002 +++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/549       |  110 +++++
>  tests/xfs/549.out   |   14 +
>  9 files changed, 1608 insertions(+)
>  create mode 100644 common/parent
>  create mode 100755 tests/xfs/547
>  create mode 100644 tests/xfs/547.out
>  create mode 100755 tests/xfs/548
>  create mode 100644 tests/xfs/548.out
>  create mode 100755 tests/xfs/549
>  create mode 100644 tests/xfs/549.out
> 
> diff --git a/common/parent b/common/parent
> new file mode 100644
> index 00000000..0af12553
> --- /dev/null
> +++ b/common/parent
> @@ -0,0 +1,196 @@
> +#
> +# 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
> +		_fail "Bad parent pointer reclen"
> +	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))

I didn't see anywhere (in this patch) call `_require_xfs_io_command parent`.
Shouldn't we make sure the "parent" feature is support by userspace and
kernel both?

> +	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 4201a059..68752cdc 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> new file mode 100755
> index 00000000..5c7d1d45
> --- /dev/null
> +++ b/tests/xfs/547
> @@ -0,0 +1,126 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 547
> +#
> +# simple parent pointer test
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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"

I think we'd better to check if current fs userspace and kernel support
"parent" feature. If it's supported, then we should report failure if
mkfs fails. Or we should skip the test before real testing start. (same
below)

Thanks,
Zorro

> +_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/547.out b/tests/xfs/547.out
> new file mode 100644
> index 00000000..e0ce9e65
> --- /dev/null
> +++ b/tests/xfs/547.out
> @@ -0,0 +1,59 @@
> +QA output created by 547
> +
> +*** 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
> diff --git a/tests/xfs/548 b/tests/xfs/548
> new file mode 100755
> index 00000000..229d871a
> --- /dev/null
> +++ b/tests/xfs/548
> @@ -0,0 +1,97 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 548
> +#
> +# multi link parent pointer test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/548.out b/tests/xfs/548.out
> new file mode 100644
> index 00000000..afdc083b
> --- /dev/null
> +++ b/tests/xfs/548.out
> @@ -0,0 +1,1002 @@
> +QA output created by 548
> +
> +*** 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
> diff --git a/tests/xfs/549 b/tests/xfs/549
> new file mode 100755
> index 00000000..e8e74b8a
> --- /dev/null
> +++ b/tests/xfs/549
> @@ -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 549
> +#
> +# parent pointer inject test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/549.out b/tests/xfs/549.out
> new file mode 100644
> index 00000000..1af49c73
> --- /dev/null
> +++ b/tests/xfs/549.out
> @@ -0,0 +1,14 @@
> +QA output created by 549
> +
> +*** 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	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-06-14 22:01 ` [PATCH v1 1/1] xfstests: Add parent pointer test Catherine Hoang
@ 2022-09-22  5:53   ` Allison Henderson
  2022-09-22 16:37   ` Zorro Lang
  2022-09-24  0:49   ` Darrick J. Wong
  2 siblings, 0 replies; 20+ messages in thread
From: Allison Henderson @ 2022-09-22  5:53 UTC (permalink / raw)
  To: fstests, Catherine Hoang, linux-xfs

Just a bump since this is still the test case I'm using for parent
pointers

On Tue, 2022-06-14 at 15:01 -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> This patch adds a test for basic parent pointer operations,
> including link, unlink, rename, overwrite, hardlinks and
> error inject.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  common/parent       |  196 +++++++++
>  common/rc           |    3 +
>  doc/group-names.txt |    1 +
>  tests/xfs/547       |  126 ++++++
>  tests/xfs/547.out   |   59 +++
>  tests/xfs/548       |   97 +++++
>  tests/xfs/548.out   | 1002
> +++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/549       |  110 +++++
>  tests/xfs/549.out   |   14 +
>  9 files changed, 1608 insertions(+)
>  create mode 100644 common/parent
>  create mode 100755 tests/xfs/547
>  create mode 100644 tests/xfs/547.out
>  create mode 100755 tests/xfs/548
>  create mode 100644 tests/xfs/548.out
>  create mode 100755 tests/xfs/549
>  create mode 100644 tests/xfs/549.out
> 
> diff --git a/common/parent b/common/parent
> new file mode 100644
> index 00000000..0af12553
> --- /dev/null
> +++ b/common/parent
> @@ -0,0 +1,196 @@
> +#
> +# 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
> +               _fail "Bad parent pointer reclen"
> +       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 4201a059..68752cdc 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
> index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
> new file mode 100755
> index 00000000..5c7d1d45
> --- /dev/null
> +++ b/tests/xfs/547
> @@ -0,0 +1,126 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> Reserved.
> +#
> +# FS QA Test 547
> +#
> +# simple parent pointer test
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +       cd /
> +       rm -f $tmp.*
> +       echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/547.out b/tests/xfs/547.out
> new file mode 100644
> index 00000000..e0ce9e65
> --- /dev/null
> +++ b/tests/xfs/547.out
> @@ -0,0 +1,59 @@
> +QA output created by 547
> +
> +*** 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
> diff --git a/tests/xfs/548 b/tests/xfs/548
> new file mode 100755
> index 00000000..229d871a
> --- /dev/null
> +++ b/tests/xfs/548
> @@ -0,0 +1,97 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
> Reserved.
> +#
> +# FS QA Test 548
> +#
> +# multi link parent pointer test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +       cd /
> +       rm -f $tmp.*
> +       echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/548.out b/tests/xfs/548.out
> new file mode 100644
> index 00000000..afdc083b
> --- /dev/null
> +++ b/tests/xfs/548.out
> @@ -0,0 +1,1002 @@
> +QA output created by 548
> +
> +*** 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
> diff --git a/tests/xfs/549 b/tests/xfs/549
> new file mode 100755
> index 00000000..e8e74b8a
> --- /dev/null
> +++ b/tests/xfs/549
> @@ -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 549
> +#
> +# parent pointer inject test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +cleanup()
> +{
> +       cd /
> +       rm -f $tmp.*
> +       echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +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"
> +
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +# 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/549.out b/tests/xfs/549.out
> new file mode 100644
> index 00000000..1af49c73
> --- /dev/null
> +++ b/tests/xfs/549.out
> @@ -0,0 +1,14 @@
> +QA output created by 549
> +
> +*** 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


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v1 1/1] xfstests: Add parent pointer test
  2022-06-14 22:01 [PATCH v1 0/1] parent pointer tests Catherine Hoang
@ 2022-06-14 22:01 ` Catherine Hoang
  2022-09-22  5:53   ` Allison Henderson
                     ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Catherine Hoang @ 2022-06-14 22:01 UTC (permalink / raw)
  To: linux-xfs, fstests

From: Allison Henderson <allison.henderson@oracle.com>

This patch adds a test for basic parent pointer operations,
including link, unlink, rename, overwrite, hardlinks and
error inject.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 common/parent       |  196 +++++++++
 common/rc           |    3 +
 doc/group-names.txt |    1 +
 tests/xfs/547       |  126 ++++++
 tests/xfs/547.out   |   59 +++
 tests/xfs/548       |   97 +++++
 tests/xfs/548.out   | 1002 +++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/549       |  110 +++++
 tests/xfs/549.out   |   14 +
 9 files changed, 1608 insertions(+)
 create mode 100644 common/parent
 create mode 100755 tests/xfs/547
 create mode 100644 tests/xfs/547.out
 create mode 100755 tests/xfs/548
 create mode 100644 tests/xfs/548.out
 create mode 100755 tests/xfs/549
 create mode 100644 tests/xfs/549.out

diff --git a/common/parent b/common/parent
new file mode 100644
index 00000000..0af12553
--- /dev/null
+++ b/common/parent
@@ -0,0 +1,196 @@
+#
+# 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
+		_fail "Bad parent pointer reclen"
+	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 4201a059..68752cdc 100644
--- a/common/rc
+++ b/common/rc
@@ -2701,6 +2701,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/doc/group-names.txt b/doc/group-names.txt
index e8e3477e..98bbe3b7 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/547 b/tests/xfs/547
new file mode 100755
index 00000000..5c7d1d45
--- /dev/null
+++ b/tests/xfs/547
@@ -0,0 +1,126 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 547
+#
+# simple parent pointer test
+#
+
+. ./common/preamble
+_begin_fstest auto quick parent
+
+cleanup()
+{
+	cd /
+	rm -f $tmp.*
+	echo 0 > /sys/fs/xfs/debug/larp
+}
+
+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"
+
+echo 1 > /sys/fs/xfs/debug/larp
+
+# 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/547.out b/tests/xfs/547.out
new file mode 100644
index 00000000..e0ce9e65
--- /dev/null
+++ b/tests/xfs/547.out
@@ -0,0 +1,59 @@
+QA output created by 547
+
+*** 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
diff --git a/tests/xfs/548 b/tests/xfs/548
new file mode 100755
index 00000000..229d871a
--- /dev/null
+++ b/tests/xfs/548
@@ -0,0 +1,97 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 548
+#
+# multi link parent pointer test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+cleanup()
+{
+	cd /
+	rm -f $tmp.*
+	echo 0 > /sys/fs/xfs/debug/larp
+}
+
+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
+
+echo 1 > /sys/fs/xfs/debug/larp
+
+# 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/548.out b/tests/xfs/548.out
new file mode 100644
index 00000000..afdc083b
--- /dev/null
+++ b/tests/xfs/548.out
@@ -0,0 +1,1002 @@
+QA output created by 548
+
+*** 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
diff --git a/tests/xfs/549 b/tests/xfs/549
new file mode 100755
index 00000000..e8e74b8a
--- /dev/null
+++ b/tests/xfs/549
@@ -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 549
+#
+# parent pointer inject test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+cleanup()
+{
+	cd /
+	rm -f $tmp.*
+	echo 0 > /sys/fs/xfs/debug/larp
+}
+
+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"
+
+echo 1 > /sys/fs/xfs/debug/larp
+
+# 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/549.out b/tests/xfs/549.out
new file mode 100644
index 00000000..1af49c73
--- /dev/null
+++ b/tests/xfs/549.out
@@ -0,0 +1,14 @@
+QA output created by 549
+
+*** 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] 20+ messages in thread

end of thread, other threads:[~2022-09-27  1:16 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-10  5:10 [PATCH v1 0/1] Parent pointers test v1 Allison Henderson
2018-06-10  5:10 ` [PATCH v1 1/1] xfstests: Add parent pointer test Allison Henderson
2018-06-10  5:43   ` Amir Goldstein
2018-06-10 11:15     ` Amir Goldstein
2018-06-10 18:54       ` Allison Henderson
2018-06-11  5:48         ` Amir Goldstein
2018-06-11 16:46           ` Allison Henderson
2018-06-10 15:49     ` Allison Henderson
2018-06-11 17:25   ` Darrick J. Wong
2018-06-11 19:59     ` Allison Henderson
2018-06-11 20:36       ` Darrick J. Wong
2022-06-14 22:01 [PATCH v1 0/1] parent pointer tests Catherine Hoang
2022-06-14 22:01 ` [PATCH v1 1/1] xfstests: Add parent pointer test Catherine Hoang
2022-09-22  5:53   ` Allison Henderson
2022-09-22 16:37   ` Zorro Lang
2022-09-22 18:45     ` Allison Henderson
2022-09-23  0:53       ` Zorro Lang
2022-09-27  1:16         ` Catherine Hoang
2022-09-24  0:49   ` Darrick J. Wong
2022-09-26 21:51     ` Allison Henderson
2022-09-27  1:03       ` Catherine Hoang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.