linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] xfstests: add parent pointer tests
@ 2022-10-28 21:56 Catherine Hoang
  2022-10-28 21:56 ` [PATCH v3 1/4] common: add helpers for " Catherine Hoang
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Catherine Hoang @ 2022-10-28 21:56 UTC (permalink / raw)
  To: linux-xfs, fstests

Hi all,

These are the tests for Allison's parent pointer series:
https://lore.kernel.org/linux-xfs/20221021222936.934426-1-allison.henderson@oracle.com/

These tests cover basic parent pointer operations, multiple links, and
error inject. This patch also adds a new parent group and parent common
functions.

v2->v3:
- Remove old helper functions
- Clean up requirements for each test
- Let mkfs handle protofile errors

Comments and feedback appreciated!

Catherine

Allison Henderson (4):
  common: add helpers for parent pointer tests
  xfs: add parent pointer test
  xfs: add multi link parent pointer test
  xfs: add parent pointer inject test

 common/parent       |  198 +++++++++
 common/rc           |    3 +
 common/xfs          |   12 +
 doc/group-names.txt |    1 +
 tests/xfs/554       |  101 +++++
 tests/xfs/554.out   |   59 +++
 tests/xfs/555       |   69 +++
 tests/xfs/555.out   | 1002 +++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/556       |   85 ++++
 tests/xfs/556.out   |   14 +
 10 files changed, 1544 insertions(+)
 create mode 100644 common/parent
 create mode 100755 tests/xfs/554
 create mode 100644 tests/xfs/554.out
 create mode 100755 tests/xfs/555
 create mode 100644 tests/xfs/555.out
 create mode 100755 tests/xfs/556
 create mode 100644 tests/xfs/556.out

-- 
2.25.1


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

* [PATCH v3 1/4] common: add helpers for parent pointer tests
  2022-10-28 21:56 [PATCH v3 0/4] xfstests: add parent pointer tests Catherine Hoang
@ 2022-10-28 21:56 ` Catherine Hoang
  2022-11-01  6:18   ` Zorro Lang
  2022-10-28 21:56 ` [PATCH v3 2/4] xfs: add parent pointer test Catherine Hoang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 13+ messages in thread
From: Catherine Hoang @ 2022-10-28 21:56 UTC (permalink / raw)
  To: linux-xfs, fstests

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

Add helper functions in common/parent to parse and verify parent
pointers. Also add functions to check that mkfs, kernel, and xfs_io
support parent pointers.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 common/parent | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++
 common/rc     |   3 +
 common/xfs    |  12 +++
 3 files changed, 213 insertions(+)
 create mode 100644 common/parent

diff --git a/common/parent b/common/parent
new file mode 100644
index 00000000..a0ba7d92
--- /dev/null
+++ b/common/parent
@@ -0,0 +1,198 @@
+#
+# Parent pointer common functions
+#
+
+#
+# parse_parent_pointer parents parent_inode parent_pointer_name
+#
+# Given a list of parent pointers, find the record that matches
+# the given inode and filename
+#
+# inputs:
+# parents	: A list of parent pointers in the format of:
+#		  inode/generation/name_length/name
+# parent_inode	: The parent inode to search for
+# parent_name	: The parent name to search for
+#
+# outputs:
+# PPINO         : Parent pointer inode
+# PPGEN         : Parent pointer generation
+# PPNAME        : Parent pointer name
+# PPNAME_LEN    : Parent pointer name length
+#
+_parse_parent_pointer()
+{
+	local parents=$1
+	local pino=$2
+	local parent_pointer_name=$3
+
+	local found=0
+
+	# Find the entry that has the same inode as the parent
+	# and parse out the entry info
+	while IFS=\/ read PPINO PPGEN PPNAME_LEN PPNAME; do
+		if [ "$PPINO" != "$pino" ]; then
+			continue
+		fi
+
+		if [ "$PPNAME" != "$parent_pointer_name" ]; then
+			continue
+		fi
+
+		found=1
+		break
+	done <<< $(echo "$parents")
+
+	# Check to see if we found anything
+	# We do not fail the test because we also use this
+	# routine to verify when parent pointers should
+	# be removed or updated  (ie a rename or a move
+	# operation changes your parent pointer)
+	if [ $found -eq "0" ]; then
+		return 1
+	fi
+
+	# Verify the parent pointer name length is correct
+	if [ "$PPNAME_LEN" -ne "${#parent_pointer_name}" ]
+	then
+		echo "*** Bad parent pointer:"\
+			"name:$PPNAME, namelen:$PPNAME_LEN"
+	fi
+
+	#return sucess
+	return 0
+}
+
+#
+# _verify_parent parent_path parent_pointer_name child_path
+#
+# Verify that the given child path lists the given parent as a parent pointer
+# and that the parent pointer name matches the given name
+#
+# Examples:
+#
+# #simple example
+# mkdir testfolder1
+# touch testfolder1/file1
+# verify_parent testfolder1 file1 testfolder1/file1
+#
+# # In this above example, we want to verify that "testfolder1"
+# # appears as a parent pointer of "testfolder1/file1".  Additionally
+# # we verify that the name record of the parent pointer is "file1"
+#
+#
+# #hardlink example
+# mkdir testfolder1
+# mkdir testfolder2
+# touch testfolder1/file1
+# ln testfolder1/file1 testfolder2/file1_ln
+# verify_parent testfolder2 file1_ln testfolder1/file1
+#
+# # In this above example, we want to verify that "testfolder2"
+# # appears as a parent pointer of "testfolder1/file1".  Additionally
+# # we verify that the name record of the parent pointer is "file1_ln"
+#
+_verify_parent()
+{
+	local parent_path=$1
+	local parent_pointer_name=$2
+	local child_path=$3
+
+	local parent_ppath="$parent_path/$parent_pointer_name"
+
+	# Verify parent exists
+	if [ ! -d $SCRATCH_MNT/$parent_path ]; then
+		_fail "$SCRATCH_MNT/$parent_path not found"
+	else
+		echo "*** $parent_path OK"
+	fi
+
+	# Verify child exists
+	if [ ! -f $SCRATCH_MNT/$child_path ]; then
+		_fail "$SCRATCH_MNT/$child_path not found"
+	else
+		echo "*** $child_path OK"
+	fi
+
+	# Verify the parent pointer name exists as a child of the parent
+	if [ ! -f $SCRATCH_MNT/$parent_ppath ]; then
+		_fail "$SCRATCH_MNT/$parent_ppath not found"
+	else
+		echo "*** $parent_ppath OK"
+	fi
+
+	# Get the inodes of both parent and child
+	pino="$(stat -c '%i' $SCRATCH_MNT/$parent_path)"
+	cino="$(stat -c '%i' $SCRATCH_MNT/$child_path)"
+
+	# Get all the parent pointers of the child
+	parents=($($XFS_IO_PROG -x -c \
+	 "parent -f -i $pino -n $parent_pointer_name" $SCRATCH_MNT/$child_path))
+	if [[ $? != 0 ]]; then
+		 _fail "No parent pointers found for $child_path"
+	fi
+
+	# Parse parent pointer output.
+	# This sets PPINO PPGEN PPNAME PPNAME_LEN
+	_parse_parent_pointer $parents $pino $parent_pointer_name
+
+	# If we didnt find one, bail out
+	if [ $? -ne 0 ]; then
+		_fail "No parent pointer record found for $parent_path"\
+			"in $child_path"
+	fi
+
+	# Verify the inode generated by the parent pointer name is
+	# the same as the child inode
+	pppino="$(stat -c '%i' $SCRATCH_MNT/$parent_ppath)"
+	if [ $cino -ne $pppino ]
+	then
+		_fail "Bad parent pointer name value for $child_path."\
+			"$SCRATCH_MNT/$parent_ppath belongs to inode $PPPINO,"\
+			"but should be $cino"
+	fi
+
+	echo "*** Verified parent pointer:"\
+			"name:$PPNAME, namelen:$PPNAME_LEN"
+	echo "*** Parent pointer OK for child $child_path"
+}
+
+#
+# _verify_parent parent_pointer_name pino child_path
+#
+# Verify that the given child path contains no parent pointer entry
+# for the given inode and file name
+#
+_verify_no_parent()
+{
+	local parent_pname=$1
+	local pino=$2
+	local child_path=$3
+
+	# Verify child exists
+	if [ ! -f $SCRATCH_MNT/$child_path ]; then
+		_fail "$SCRATCH_MNT/$child_path not found"
+	else
+		echo "*** $child_path OK"
+	fi
+
+	# Get all the parent pointers of the child
+	local parents=($($XFS_IO_PROG -x -c \
+	 "parent -f -i $pino -n $parent_pname" $SCRATCH_MNT/$child_path))
+	if [[ $? != 0 ]]; then
+		return 0
+	fi
+
+	# Parse parent pointer output.
+	# This sets PPINO PPGEN PPNAME PPNAME_LEN
+	_parse_parent_pointer $parents $pino $parent_pname
+
+	# If we didnt find one, return sucess
+	if [ $? -ne 0 ]; then
+		return 0
+	fi
+
+	_fail "Parent pointer entry found where none should:"\
+			"inode:$PPINO, gen:$PPGEN,"
+			"name:$PPNAME, namelen:$PPNAME_LEN"
+}
diff --git a/common/rc b/common/rc
index d1f3d56b..9fc0a785 100644
--- a/common/rc
+++ b/common/rc
@@ -2539,6 +2539,9 @@ _require_xfs_io_command()
 		echo $testio | grep -q "invalid option" && \
 			_notrun "xfs_io $command support is missing"
 		;;
+	"parent")
+		testio=`$XFS_IO_PROG -x -c "parent" $TEST_DIR 2>&1`
+		;;
 	"pwrite")
 		# -N (RWF_NOWAIT) only works with direct vectored I/O writes
 		local pwrite_opts=" "
diff --git a/common/xfs b/common/xfs
index 170dd621..7233a2db 100644
--- a/common/xfs
+++ b/common/xfs
@@ -1399,3 +1399,15 @@ _xfs_filter_mkfs()
 		print STDOUT "realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX\n";
 	}'
 }
+
+# this test requires the xfs parent pointers feature
+#
+_require_xfs_parent()
+{
+	_scratch_mkfs_xfs_supported -n parent > /dev/null 2>&1 \
+		|| _notrun "mkfs.xfs does not support parent pointers"
+	_scratch_mkfs_xfs -n parent > /dev/null 2>&1
+	_try_scratch_mount >/dev/null 2>&1 \
+		|| _notrun "kernel does not support parent pointers"
+	_scratch_unmount
+}
-- 
2.25.1


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

* [PATCH v3 2/4] xfs: add parent pointer test
  2022-10-28 21:56 [PATCH v3 0/4] xfstests: add parent pointer tests Catherine Hoang
  2022-10-28 21:56 ` [PATCH v3 1/4] common: add helpers for " Catherine Hoang
@ 2022-10-28 21:56 ` Catherine Hoang
  2022-11-01  6:23   ` Zorro Lang
  2022-10-28 21:56 ` [PATCH v3 3/4] xfs: add multi link " Catherine Hoang
  2022-10-28 21:56 ` [PATCH v3 4/4] xfs: add parent pointer inject test Catherine Hoang
  3 siblings, 1 reply; 13+ messages in thread
From: Catherine Hoang @ 2022-10-28 21:56 UTC (permalink / raw)
  To: linux-xfs, fstests

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

Add a test to verify basic parent pointers operations (create, move, link,
unlink, rename, overwrite).

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 doc/group-names.txt |   1 +
 tests/xfs/554       | 101 ++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/554.out   |  59 ++++++++++++++++++++++++++
 3 files changed, 161 insertions(+)
 create mode 100755 tests/xfs/554
 create mode 100644 tests/xfs/554.out

diff --git a/doc/group-names.txt b/doc/group-names.txt
index ef411b5e..8e35c699 100644
--- a/doc/group-names.txt
+++ b/doc/group-names.txt
@@ -77,6 +77,7 @@ nfs4_acl		NFSv4 access control lists
 nonsamefs		overlayfs layers on different filesystems
 online_repair		online repair functionality tests
 other			dumping ground, do not add more tests to this group
+parent			Parent pointer tests
 pattern			specific IO pattern tests
 perms			access control and permission checking
 pipe			pipe functionality
diff --git a/tests/xfs/554 b/tests/xfs/554
new file mode 100755
index 00000000..44b77f9d
--- /dev/null
+++ b/tests/xfs/554
@@ -0,0 +1,101 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 554
+#
+# simple parent pointer test
+#
+
+. ./common/preamble
+_begin_fstest auto quick parent
+
+# get standard environment, filters and checks
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_sysfs debug/larp
+_require_xfs_parent
+_require_xfs_io_command "parent"
+
+# real QA test starts here
+
+# Create a directory tree using a protofile and
+# make sure all inodes created have parent pointers
+
+protofile=$tmp.proto
+
+cat >$protofile <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+: a directory
+testfolder1 d--755 3 1
+file1 ---755 3 1 /dev/null
+$
+: back in the root
+testfolder2 d--755 3 1
+file2 ---755 3 1 /dev/null
+: done
+$
+EOF
+
+_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
+	|| _fail "mkfs failed"
+_check_scratch_fs
+
+_scratch_mount >>$seqres.full 2>&1 \
+	|| _fail "mount failed"
+
+testfolder1="testfolder1"
+testfolder2="testfolder2"
+file1="file1"
+file2="file2"
+file3="file3"
+file1_ln="file1_link"
+
+echo ""
+# Create parent pointer test
+_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
+
+echo ""
+# Move parent pointer test
+mv $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder2/$file1
+_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
+
+echo ""
+# Hard link parent pointer test
+ln $SCRATCH_MNT/$testfolder2/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln
+_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
+_verify_parent "$testfolder1" "$file1_ln" "$testfolder2/$file1"
+_verify_parent "$testfolder2" "$file1"    "$testfolder1/$file1_ln"
+_verify_parent "$testfolder2" "$file1"    "$testfolder2/$file1"
+
+echo ""
+# Remove hard link parent pointer test
+ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
+rm $SCRATCH_MNT/$testfolder2/$file1
+_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
+_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
+
+echo ""
+# Rename parent pointer test
+ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
+mv $SCRATCH_MNT/$testfolder1/$file1_ln $SCRATCH_MNT/$testfolder1/$file2
+_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
+_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
+
+echo ""
+# Over write parent pointer test
+touch $SCRATCH_MNT/$testfolder2/$file3
+_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3"
+ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
+mv -f $SCRATCH_MNT/$testfolder2/$file3 $SCRATCH_MNT/$testfolder1/$file2
+_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/554.out b/tests/xfs/554.out
new file mode 100644
index 00000000..67ea9f2b
--- /dev/null
+++ b/tests/xfs/554.out
@@ -0,0 +1,59 @@
+QA output created by 554
+
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1
+
+*** testfolder2 OK
+*** testfolder2/file1 OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder2/file1
+
+*** testfolder1 OK
+*** testfolder1/file1_link OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder1/file1_link
+*** testfolder1 OK
+*** testfolder2/file1 OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder2/file1
+*** testfolder2 OK
+*** testfolder1/file1_link OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link
+*** testfolder2 OK
+*** testfolder2/file1 OK
+*** testfolder2/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder2/file1
+
+*** testfolder1 OK
+*** testfolder1/file1_link OK
+*** testfolder1/file1_link OK
+*** Verified parent pointer: name:file1_link, namelen:10
+*** Parent pointer OK for child testfolder1/file1_link
+*** testfolder1/file1_link OK
+
+*** testfolder1 OK
+*** testfolder1/file2 OK
+*** testfolder1/file2 OK
+*** Verified parent pointer: name:file2, namelen:5
+*** Parent pointer OK for child testfolder1/file2
+*** testfolder1/file2 OK
+
+*** testfolder2 OK
+*** testfolder2/file3 OK
+*** testfolder2/file3 OK
+*** Verified parent pointer: name:file3, namelen:5
+*** Parent pointer OK for child testfolder2/file3
+*** testfolder1 OK
+*** testfolder1/file2 OK
+*** testfolder1/file2 OK
+*** Verified parent pointer: name:file2, namelen:5
+*** Parent pointer OK for child testfolder1/file2
-- 
2.25.1


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

* [PATCH v3 3/4] xfs: add multi link parent pointer test
  2022-10-28 21:56 [PATCH v3 0/4] xfstests: add parent pointer tests Catherine Hoang
  2022-10-28 21:56 ` [PATCH v3 1/4] common: add helpers for " Catherine Hoang
  2022-10-28 21:56 ` [PATCH v3 2/4] xfs: add parent pointer test Catherine Hoang
@ 2022-10-28 21:56 ` Catherine Hoang
  2022-11-01  6:26   ` Zorro Lang
  2022-10-28 21:56 ` [PATCH v3 4/4] xfs: add parent pointer inject test Catherine Hoang
  3 siblings, 1 reply; 13+ messages in thread
From: Catherine Hoang @ 2022-10-28 21:56 UTC (permalink / raw)
  To: linux-xfs, fstests

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

Add a test to verify parent pointers while multiple links to a file are
created and removed.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 tests/xfs/555     |   69 ++++
 tests/xfs/555.out | 1002 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1071 insertions(+)
 create mode 100755 tests/xfs/555
 create mode 100644 tests/xfs/555.out

diff --git a/tests/xfs/555 b/tests/xfs/555
new file mode 100755
index 00000000..02de3f15
--- /dev/null
+++ b/tests/xfs/555
@@ -0,0 +1,69 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 555
+#
+# multi link parent pointer test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+# get standard environment, filters and checks
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_sysfs debug/larp
+_require_xfs_parent
+_require_xfs_io_command "parent"
+
+# real QA test starts here
+
+# Create a directory tree using a protofile and
+# make sure all inodes created have parent pointers
+
+protofile=$tmp.proto
+
+cat >$protofile <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+: a directory
+testfolder1 d--755 3 1
+file1 ---755 3 1 /dev/null
+: done
+$
+EOF
+
+_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"
+file1="file1"
+file1_ln="file1_link"
+
+echo ""
+# Multi link parent pointer test
+NLINKS=100
+for (( j=0; j<$NLINKS; j++ )); do
+	ln $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln.$j
+	_verify_parent "$testfolder1" "$file1_ln.$j" "$testfolder1/$file1"
+	_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1_ln.$j"
+done
+# Multi unlink parent pointer test
+for (( j=$NLINKS-1; j<=0; j-- )); do
+	ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln.$j)"
+	rm $SCRATCH_MNT/$testfolder1/$file1_ln.$j
+	_verify_no_parent "$file1_ln.$j" "$ino" "$testfolder1/$file1"
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/555.out b/tests/xfs/555.out
new file mode 100644
index 00000000..eb63ff3a
--- /dev/null
+++ b/tests/xfs/555.out
@@ -0,0 +1,1002 @@
+QA output created by 555
+
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.0 OK
+*** Verified parent pointer: name:file1_link.0, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.0 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.0
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.1 OK
+*** Verified parent pointer: name:file1_link.1, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.1 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.1
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.2 OK
+*** Verified parent pointer: name:file1_link.2, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.2 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.2
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.3 OK
+*** Verified parent pointer: name:file1_link.3, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.3 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.3
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.4 OK
+*** Verified parent pointer: name:file1_link.4, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.4 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.4
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.5 OK
+*** Verified parent pointer: name:file1_link.5, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.5 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.5
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.6 OK
+*** Verified parent pointer: name:file1_link.6, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.6 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.6
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.7 OK
+*** Verified parent pointer: name:file1_link.7, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.7 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.7
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.8 OK
+*** Verified parent pointer: name:file1_link.8, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.8 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.8
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.9 OK
+*** Verified parent pointer: name:file1_link.9, namelen:12
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.9 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.9
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.10 OK
+*** Verified parent pointer: name:file1_link.10, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.10 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.10
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.11 OK
+*** Verified parent pointer: name:file1_link.11, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.11 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.11
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.12 OK
+*** Verified parent pointer: name:file1_link.12, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.12 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.12
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.13 OK
+*** Verified parent pointer: name:file1_link.13, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.13 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.13
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.14 OK
+*** Verified parent pointer: name:file1_link.14, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.14 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.14
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.15 OK
+*** Verified parent pointer: name:file1_link.15, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.15 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.15
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.16 OK
+*** Verified parent pointer: name:file1_link.16, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.16 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.16
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.17 OK
+*** Verified parent pointer: name:file1_link.17, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.17 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.17
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.18 OK
+*** Verified parent pointer: name:file1_link.18, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.18 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.18
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.19 OK
+*** Verified parent pointer: name:file1_link.19, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.19 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.19
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.20 OK
+*** Verified parent pointer: name:file1_link.20, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.20 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.20
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.21 OK
+*** Verified parent pointer: name:file1_link.21, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.21 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.21
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.22 OK
+*** Verified parent pointer: name:file1_link.22, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.22 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.22
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.23 OK
+*** Verified parent pointer: name:file1_link.23, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.23 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.23
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.24 OK
+*** Verified parent pointer: name:file1_link.24, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.24 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.24
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.25 OK
+*** Verified parent pointer: name:file1_link.25, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.25 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.25
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.26 OK
+*** Verified parent pointer: name:file1_link.26, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.26 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.26
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.27 OK
+*** Verified parent pointer: name:file1_link.27, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.27 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.27
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.28 OK
+*** Verified parent pointer: name:file1_link.28, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.28 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.28
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.29 OK
+*** Verified parent pointer: name:file1_link.29, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.29 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.29
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.30 OK
+*** Verified parent pointer: name:file1_link.30, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.30 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.30
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.31 OK
+*** Verified parent pointer: name:file1_link.31, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.31 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.31
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.32 OK
+*** Verified parent pointer: name:file1_link.32, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.32 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.32
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.33 OK
+*** Verified parent pointer: name:file1_link.33, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.33 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.33
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.34 OK
+*** Verified parent pointer: name:file1_link.34, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.34 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.34
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.35 OK
+*** Verified parent pointer: name:file1_link.35, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.35 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.35
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.36 OK
+*** Verified parent pointer: name:file1_link.36, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.36 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.36
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.37 OK
+*** Verified parent pointer: name:file1_link.37, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.37 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.37
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.38 OK
+*** Verified parent pointer: name:file1_link.38, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.38 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.38
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.39 OK
+*** Verified parent pointer: name:file1_link.39, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.39 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.39
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.40 OK
+*** Verified parent pointer: name:file1_link.40, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.40 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.40
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.41 OK
+*** Verified parent pointer: name:file1_link.41, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.41 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.41
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.42 OK
+*** Verified parent pointer: name:file1_link.42, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.42 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.42
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.43 OK
+*** Verified parent pointer: name:file1_link.43, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.43 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.43
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.44 OK
+*** Verified parent pointer: name:file1_link.44, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.44 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.44
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.45 OK
+*** Verified parent pointer: name:file1_link.45, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.45 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.45
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.46 OK
+*** Verified parent pointer: name:file1_link.46, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.46 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.46
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.47 OK
+*** Verified parent pointer: name:file1_link.47, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.47 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.47
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.48 OK
+*** Verified parent pointer: name:file1_link.48, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.48 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.48
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.49 OK
+*** Verified parent pointer: name:file1_link.49, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.49 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.49
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.50 OK
+*** Verified parent pointer: name:file1_link.50, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.50 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.50
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.51 OK
+*** Verified parent pointer: name:file1_link.51, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.51 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.51
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.52 OK
+*** Verified parent pointer: name:file1_link.52, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.52 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.52
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.53 OK
+*** Verified parent pointer: name:file1_link.53, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.53 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.53
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.54 OK
+*** Verified parent pointer: name:file1_link.54, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.54 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.54
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.55 OK
+*** Verified parent pointer: name:file1_link.55, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.55 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.55
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.56 OK
+*** Verified parent pointer: name:file1_link.56, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.56 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.56
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.57 OK
+*** Verified parent pointer: name:file1_link.57, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.57 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.57
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.58 OK
+*** Verified parent pointer: name:file1_link.58, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.58 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.58
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.59 OK
+*** Verified parent pointer: name:file1_link.59, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.59 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.59
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.60 OK
+*** Verified parent pointer: name:file1_link.60, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.60 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.60
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.61 OK
+*** Verified parent pointer: name:file1_link.61, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.61 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.61
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.62 OK
+*** Verified parent pointer: name:file1_link.62, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.62 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.62
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.63 OK
+*** Verified parent pointer: name:file1_link.63, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.63 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.63
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.64 OK
+*** Verified parent pointer: name:file1_link.64, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.64 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.64
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.65 OK
+*** Verified parent pointer: name:file1_link.65, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.65 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.65
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.66 OK
+*** Verified parent pointer: name:file1_link.66, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.66 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.66
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.67 OK
+*** Verified parent pointer: name:file1_link.67, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.67 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.67
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.68 OK
+*** Verified parent pointer: name:file1_link.68, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.68 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.68
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.69 OK
+*** Verified parent pointer: name:file1_link.69, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.69 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.69
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.70 OK
+*** Verified parent pointer: name:file1_link.70, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.70 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.70
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.71 OK
+*** Verified parent pointer: name:file1_link.71, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.71 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.71
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.72 OK
+*** Verified parent pointer: name:file1_link.72, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.72 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.72
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.73 OK
+*** Verified parent pointer: name:file1_link.73, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.73 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.73
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.74 OK
+*** Verified parent pointer: name:file1_link.74, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.74 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.74
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.75 OK
+*** Verified parent pointer: name:file1_link.75, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.75 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.75
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.76 OK
+*** Verified parent pointer: name:file1_link.76, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.76 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.76
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.77 OK
+*** Verified parent pointer: name:file1_link.77, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.77 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.77
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.78 OK
+*** Verified parent pointer: name:file1_link.78, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.78 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.78
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.79 OK
+*** Verified parent pointer: name:file1_link.79, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.79 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.79
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.80 OK
+*** Verified parent pointer: name:file1_link.80, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.80 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.80
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.81 OK
+*** Verified parent pointer: name:file1_link.81, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.81 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.81
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.82 OK
+*** Verified parent pointer: name:file1_link.82, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.82 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.82
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.83 OK
+*** Verified parent pointer: name:file1_link.83, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.83 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.83
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.84 OK
+*** Verified parent pointer: name:file1_link.84, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.84 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.84
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.85 OK
+*** Verified parent pointer: name:file1_link.85, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.85 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.85
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.86 OK
+*** Verified parent pointer: name:file1_link.86, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.86 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.86
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.87 OK
+*** Verified parent pointer: name:file1_link.87, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.87 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.87
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.88 OK
+*** Verified parent pointer: name:file1_link.88, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.88 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.88
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.89 OK
+*** Verified parent pointer: name:file1_link.89, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.89 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.89
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.90 OK
+*** Verified parent pointer: name:file1_link.90, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.90 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.90
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.91 OK
+*** Verified parent pointer: name:file1_link.91, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.91 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.91
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.92 OK
+*** Verified parent pointer: name:file1_link.92, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.92 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.92
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.93 OK
+*** Verified parent pointer: name:file1_link.93, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.93 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.93
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.94 OK
+*** Verified parent pointer: name:file1_link.94, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.94 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.94
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.95 OK
+*** Verified parent pointer: name:file1_link.95, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.95 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.95
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.96 OK
+*** Verified parent pointer: name:file1_link.96, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.96 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.96
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.97 OK
+*** Verified parent pointer: name:file1_link.97, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.97 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.97
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.98 OK
+*** Verified parent pointer: name:file1_link.98, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.98 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.98
+*** testfolder1 OK
+*** testfolder1/file1 OK
+*** testfolder1/file1_link.99 OK
+*** Verified parent pointer: name:file1_link.99, namelen:13
+*** Parent pointer OK for child testfolder1/file1
+*** testfolder1 OK
+*** testfolder1/file1_link.99 OK
+*** testfolder1/file1 OK
+*** Verified parent pointer: name:file1, namelen:5
+*** Parent pointer OK for child testfolder1/file1_link.99
-- 
2.25.1


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

* [PATCH v3 4/4] xfs: add parent pointer inject test
  2022-10-28 21:56 [PATCH v3 0/4] xfstests: add parent pointer tests Catherine Hoang
                   ` (2 preceding siblings ...)
  2022-10-28 21:56 ` [PATCH v3 3/4] xfs: add multi link " Catherine Hoang
@ 2022-10-28 21:56 ` Catherine Hoang
  3 siblings, 0 replies; 13+ messages in thread
From: Catherine Hoang @ 2022-10-28 21:56 UTC (permalink / raw)
  To: linux-xfs, fstests

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

Add a test to verify parent pointers after an error injection and log
replay.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 tests/xfs/556     | 85 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/556.out | 14 ++++++++
 2 files changed, 99 insertions(+)
 create mode 100755 tests/xfs/556
 create mode 100644 tests/xfs/556.out

diff --git a/tests/xfs/556 b/tests/xfs/556
new file mode 100755
index 00000000..1de776be
--- /dev/null
+++ b/tests/xfs/556
@@ -0,0 +1,85 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 556
+#
+# parent pointer inject test
+#
+. ./common/preamble
+_begin_fstest auto quick parent
+
+# get standard environment, filters and checks
+. ./common/filter
+. ./common/inject
+. ./common/parent
+
+# Modify as appropriate
+_supported_fs xfs
+_require_scratch
+_require_xfs_sysfs debug/larp
+_require_xfs_io_error_injection "larp"
+_require_xfs_parent
+_require_xfs_io_command "parent"
+
+# real QA test starts here
+
+# Create a directory tree using a protofile and
+# make sure all inodes created have parent pointers
+
+protofile=$tmp.proto
+
+cat >$protofile <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+: a directory
+testfolder1 d--755 3 1
+$
+: back in the root
+testfolder2 d--755 3 1
+: done
+$
+EOF
+
+_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
+	|| _fail "mkfs failed"
+_check_scratch_fs
+
+_scratch_mount >>$seqres.full 2>&1 \
+	|| _fail "mount failed"
+
+testfolder1="testfolder1"
+testfolder2="testfolder2"
+file4="file4"
+file5="file5"
+
+echo ""
+
+# Create files
+touch $SCRATCH_MNT/$testfolder1/$file4
+_verify_parent "$testfolder1" "$file4" "$testfolder1/$file4"
+
+# Inject error
+_scratch_inject_error "larp"
+
+# Move files
+mv $SCRATCH_MNT/$testfolder1/$file4 $SCRATCH_MNT/$testfolder2/$file5 2>&1 \
+	| _filter_scratch
+
+# FS should be shut down, touch will fail
+touch $SCRATCH_MNT/$testfolder2/$file5 2>&1 | _filter_scratch
+
+# Remount to replay log
+_scratch_remount_dump_log >> $seqres.full
+
+# FS should be online, touch should succeed
+touch $SCRATCH_MNT/$testfolder2/$file5
+
+# Check files again
+_verify_parent "$testfolder2" "$file5" "$testfolder2/$file5"
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/556.out b/tests/xfs/556.out
new file mode 100644
index 00000000..812330ee
--- /dev/null
+++ b/tests/xfs/556.out
@@ -0,0 +1,14 @@
+QA output created by 556
+
+*** testfolder1 OK
+*** testfolder1/file4 OK
+*** testfolder1/file4 OK
+*** Verified parent pointer: name:file4, namelen:5
+*** Parent pointer OK for child testfolder1/file4
+mv: cannot stat 'SCRATCH_MNT/testfolder1/file4': Input/output error
+touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output error
+*** testfolder2 OK
+*** testfolder2/file5 OK
+*** testfolder2/file5 OK
+*** Verified parent pointer: name:file5, namelen:5
+*** Parent pointer OK for child testfolder2/file5
-- 
2.25.1


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

* Re: [PATCH v3 1/4] common: add helpers for parent pointer tests
  2022-10-28 21:56 ` [PATCH v3 1/4] common: add helpers for " Catherine Hoang
@ 2022-11-01  6:18   ` Zorro Lang
  2022-11-02 23:02     ` Catherine Hoang
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-11-01  6:18 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Fri, Oct 28, 2022 at 02:56:02PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> Add helper functions in common/parent to parse and verify parent
> pointers. Also add functions to check that mkfs, kernel, and xfs_io
> support parent pointers.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---

Looks good to me, just a few typo problem as below ...

>  common/parent | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  common/rc     |   3 +
>  common/xfs    |  12 +++
>  3 files changed, 213 insertions(+)
>  create mode 100644 common/parent
> 
> diff --git a/common/parent b/common/parent
> new file mode 100644
> index 00000000..a0ba7d92
> --- /dev/null
> +++ b/common/parent
> @@ -0,0 +1,198 @@
> +#
> +# Parent pointer common functions
> +#
> +
> +#
> +# parse_parent_pointer parents parent_inode parent_pointer_name
> +#
> +# Given a list of parent pointers, find the record that matches
> +# the given inode and filename
> +#
> +# inputs:
> +# parents	: A list of parent pointers in the format of:
> +#		  inode/generation/name_length/name
> +# parent_inode	: The parent inode to search for
> +# parent_name	: The parent name to search for
> +#
> +# outputs:
> +# PPINO         : Parent pointer inode
> +# PPGEN         : Parent pointer generation
> +# PPNAME        : Parent pointer name
> +# PPNAME_LEN    : Parent pointer name length
> +#
> +_parse_parent_pointer()
> +{
> +	local parents=$1
> +	local pino=$2
> +	local parent_pointer_name=$3
> +
> +	local found=0
> +
> +	# Find the entry that has the same inode as the parent
> +	# and parse out the entry info
> +	while IFS=\/ read PPINO PPGEN PPNAME_LEN PPNAME; do
> +		if [ "$PPINO" != "$pino" ]; then
> +			continue
> +		fi
> +
> +		if [ "$PPNAME" != "$parent_pointer_name" ]; then
> +			continue
> +		fi
> +
> +		found=1
> +		break
> +	done <<< $(echo "$parents")
> +
> +	# Check to see if we found anything
> +	# We do not fail the test because we also use this
> +	# routine to verify when parent pointers should
> +	# be removed or updated  (ie a rename or a move
> +	# operation changes your parent pointer)
> +	if [ $found -eq "0" ]; then
> +		return 1
> +	fi
> +
> +	# Verify the parent pointer name length is correct
> +	if [ "$PPNAME_LEN" -ne "${#parent_pointer_name}" ]
> +	then
> +		echo "*** Bad parent pointer:"\
> +			"name:$PPNAME, namelen:$PPNAME_LEN"
> +	fi
> +
> +	#return sucess
> +	return 0
> +}
> +
> +#
> +# _verify_parent parent_path parent_pointer_name child_path
> +#
> +# Verify that the given child path lists the given parent as a parent pointer
> +# and that the parent pointer name matches the given name
> +#
> +# Examples:
> +#
> +# #simple example
> +# mkdir testfolder1
> +# touch testfolder1/file1
> +# verify_parent testfolder1 file1 testfolder1/file1

_verify_parent

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

_verify_parent

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

> +#
> +# 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 d1f3d56b..9fc0a785 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2539,6 +2539,9 @@ _require_xfs_io_command()
>  		echo $testio | grep -q "invalid option" && \
>  			_notrun "xfs_io $command support is missing"
>  		;;
> +	"parent")
> +		testio=`$XFS_IO_PROG -x -c "parent" $TEST_DIR 2>&1`
> +		;;
>  	"pwrite")
>  		# -N (RWF_NOWAIT) only works with direct vectored I/O writes
>  		local pwrite_opts=" "
> diff --git a/common/xfs b/common/xfs
> index 170dd621..7233a2db 100644
> --- a/common/xfs
> +++ b/common/xfs
> @@ -1399,3 +1399,15 @@ _xfs_filter_mkfs()
>  		print STDOUT "realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX\n";
>  	}'
>  }
> +
> +# this test requires the xfs parent pointers feature
> +#
> +_require_xfs_parent()
> +{
> +	_scratch_mkfs_xfs_supported -n parent > /dev/null 2>&1 \
> +		|| _notrun "mkfs.xfs does not support parent pointers"
> +	_scratch_mkfs_xfs -n parent > /dev/null 2>&1
> +	_try_scratch_mount >/dev/null 2>&1 \
> +		|| _notrun "kernel does not support parent pointers"
> +	_scratch_unmount
> +}
> -- 
> 2.25.1
> 


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

* Re: [PATCH v3 2/4] xfs: add parent pointer test
  2022-10-28 21:56 ` [PATCH v3 2/4] xfs: add parent pointer test Catherine Hoang
@ 2022-11-01  6:23   ` Zorro Lang
  2022-11-02 23:11     ` Catherine Hoang
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-11-01  6:23 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Fri, Oct 28, 2022 at 02:56:03PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> Add a test to verify basic parent pointers operations (create, move, link,
> unlink, rename, overwrite).
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  doc/group-names.txt |   1 +
>  tests/xfs/554       | 101 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/554.out   |  59 ++++++++++++++++++++++++++
>  3 files changed, 161 insertions(+)
>  create mode 100755 tests/xfs/554
>  create mode 100644 tests/xfs/554.out
> 
> diff --git a/doc/group-names.txt b/doc/group-names.txt
> index ef411b5e..8e35c699 100644
> --- a/doc/group-names.txt
> +++ b/doc/group-names.txt
> @@ -77,6 +77,7 @@ nfs4_acl		NFSv4 access control lists
>  nonsamefs		overlayfs layers on different filesystems
>  online_repair		online repair functionality tests
>  other			dumping ground, do not add more tests to this group
> +parent			Parent pointer tests
>  pattern			specific IO pattern tests
>  perms			access control and permission checking
>  pipe			pipe functionality
> diff --git a/tests/xfs/554 b/tests/xfs/554

Hi,

xfs/554 has been taken, please rebase to the lastest for-next branch, or you
can a big enough number (e.g. 999) to avoid merging conflict, then I can rename
the name after merging.

> new file mode 100755
> index 00000000..44b77f9d
> --- /dev/null
> +++ b/tests/xfs/554
> @@ -0,0 +1,101 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 554
> +#
> +# simple parent pointer test
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +# get standard environment, filters and checks
> +. ./common/parent
> +
> +# Modify as appropriate
> +_supported_fs xfs
> +_require_scratch
> +_require_xfs_sysfs debug/larp

Is debug/larp needed by this case?

> +_require_xfs_parent
> +_require_xfs_io_command "parent"
> +
> +# real QA test starts here
> +
> +# Create a directory tree using a protofile and
> +# make sure all inodes created have parent pointers
> +
> +protofile=$tmp.proto
> +
> +cat >$protofile <<EOF
> +DUMMY1
> +0 0
> +: root directory
> +d--777 3 1
> +: a directory
> +testfolder1 d--755 3 1
> +file1 ---755 3 1 /dev/null
> +$
> +: back in the root
> +testfolder2 d--755 3 1
> +file2 ---755 3 1 /dev/null
> +: done
> +$
> +EOF
> +
> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
> +	|| _fail "mkfs failed"
> +_check_scratch_fs
> +
> +_scratch_mount >>$seqres.full 2>&1 \
> +	|| _fail "mount failed"

_scratch_mount calls _fail() inside.

Thanks,
Zorro

> +
> +testfolder1="testfolder1"
> +testfolder2="testfolder2"
> +file1="file1"
> +file2="file2"
> +file3="file3"
> +file1_ln="file1_link"
> +
> +echo ""
> +# Create parent pointer test
> +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
> +
> +echo ""
> +# Move parent pointer test
> +mv $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder2/$file1
> +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
> +
> +echo ""
> +# Hard link parent pointer test
> +ln $SCRATCH_MNT/$testfolder2/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln
> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder2/$file1"
> +_verify_parent "$testfolder2" "$file1"    "$testfolder1/$file1_ln"
> +_verify_parent "$testfolder2" "$file1"    "$testfolder2/$file1"
> +
> +echo ""
> +# Remove hard link parent pointer test
> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
> +rm $SCRATCH_MNT/$testfolder2/$file1
> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
> +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
> +
> +echo ""
> +# Rename parent pointer test
> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
> +mv $SCRATCH_MNT/$testfolder1/$file1_ln $SCRATCH_MNT/$testfolder1/$file2
> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
> +
> +echo ""
> +# Over write parent pointer test
> +touch $SCRATCH_MNT/$testfolder2/$file3
> +_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3"
> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
> +mv -f $SCRATCH_MNT/$testfolder2/$file3 $SCRATCH_MNT/$testfolder1/$file2
> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/554.out b/tests/xfs/554.out
> new file mode 100644
> index 00000000..67ea9f2b
> --- /dev/null
> +++ b/tests/xfs/554.out
> @@ -0,0 +1,59 @@
> +QA output created by 554
> +
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1
> +
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1
> +
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link
> +*** testfolder1 OK
> +*** testfolder2/file1 OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder2/file1
> +*** testfolder2 OK
> +*** testfolder1/file1_link OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link
> +*** testfolder2 OK
> +*** testfolder2/file1 OK
> +*** testfolder2/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder2/file1
> +
> +*** testfolder1 OK
> +*** testfolder1/file1_link OK
> +*** testfolder1/file1_link OK
> +*** Verified parent pointer: name:file1_link, namelen:10
> +*** Parent pointer OK for child testfolder1/file1_link
> +*** testfolder1/file1_link OK
> +
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2
> +*** testfolder1/file2 OK
> +
> +*** testfolder2 OK
> +*** testfolder2/file3 OK
> +*** testfolder2/file3 OK
> +*** Verified parent pointer: name:file3, namelen:5
> +*** Parent pointer OK for child testfolder2/file3
> +*** testfolder1 OK
> +*** testfolder1/file2 OK
> +*** testfolder1/file2 OK
> +*** Verified parent pointer: name:file2, namelen:5
> +*** Parent pointer OK for child testfolder1/file2
> -- 
> 2.25.1
> 


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

* Re: [PATCH v3 3/4] xfs: add multi link parent pointer test
  2022-10-28 21:56 ` [PATCH v3 3/4] xfs: add multi link " Catherine Hoang
@ 2022-11-01  6:26   ` Zorro Lang
  2022-11-02 23:16     ` Catherine Hoang
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-11-01  6:26 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Fri, Oct 28, 2022 at 02:56:04PM -0700, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> Add a test to verify parent pointers while multiple links to a file are
> created and removed.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  tests/xfs/555     |   69 ++++
>  tests/xfs/555.out | 1002 +++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 1071 insertions(+)
>  create mode 100755 tests/xfs/555
>  create mode 100644 tests/xfs/555.out
> 
> diff --git a/tests/xfs/555 b/tests/xfs/555
> new file mode 100755
> index 00000000..02de3f15
> --- /dev/null
> +++ b/tests/xfs/555

Hi,

xfs/555 is taken too.

> @@ -0,0 +1,69 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 555
> +#
> +# multi link parent pointer test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick parent
> +
> +# get standard environment, filters and checks
> +. ./common/parent
> +
> +# Modify as appropriate

This comment can be removed

> +_supported_fs xfs
> +_require_scratch
> +_require_xfs_sysfs debug/larp

Is debug/larp really needed by this case?

> +_require_xfs_parent
> +_require_xfs_io_command "parent"
> +
> +# real QA test starts here
> +
> +# Create a directory tree using a protofile and
> +# make sure all inodes created have parent pointers
> +
> +protofile=$tmp.proto
> +
> +cat >$protofile <<EOF
> +DUMMY1
> +0 0
> +: root directory
> +d--777 3 1
> +: a directory
> +testfolder1 d--755 3 1
> +file1 ---755 3 1 /dev/null
> +: done
> +$
> +EOF
> +
> +_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"

This _fail isn't needed, due to _scratch_mount calls _fail() inside.

Thanks,
Zorro

> +
> +testfolder1="testfolder1"
> +file1="file1"
> +file1_ln="file1_link"
> +
> +echo ""
> +# Multi link parent pointer test
> +NLINKS=100
> +for (( j=0; j<$NLINKS; j++ )); do
> +	ln $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln.$j
> +	_verify_parent "$testfolder1" "$file1_ln.$j" "$testfolder1/$file1"
> +	_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1_ln.$j"
> +done
> +# Multi unlink parent pointer test
> +for (( j=$NLINKS-1; j<=0; j-- )); do
> +	ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln.$j)"
> +	rm $SCRATCH_MNT/$testfolder1/$file1_ln.$j
> +	_verify_no_parent "$file1_ln.$j" "$ino" "$testfolder1/$file1"
> +done
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/555.out b/tests/xfs/555.out
> new file mode 100644
> index 00000000..eb63ff3a
> --- /dev/null
> +++ b/tests/xfs/555.out
> @@ -0,0 +1,1002 @@
> +QA output created by 555
> +
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.0 OK
> +*** Verified parent pointer: name:file1_link.0, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.0 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.0
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.1 OK
> +*** Verified parent pointer: name:file1_link.1, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.1 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.1
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.2 OK
> +*** Verified parent pointer: name:file1_link.2, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.2 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.2
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.3 OK
> +*** Verified parent pointer: name:file1_link.3, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.3 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.3
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.4 OK
> +*** Verified parent pointer: name:file1_link.4, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.4 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.4
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.5 OK
> +*** Verified parent pointer: name:file1_link.5, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.5 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.5
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.6 OK
> +*** Verified parent pointer: name:file1_link.6, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.6 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.6
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.7 OK
> +*** Verified parent pointer: name:file1_link.7, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.7 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.7
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.8 OK
> +*** Verified parent pointer: name:file1_link.8, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.8 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.8
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.9 OK
> +*** Verified parent pointer: name:file1_link.9, namelen:12
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.9 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.9
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.10 OK
> +*** Verified parent pointer: name:file1_link.10, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.10 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.10
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.11 OK
> +*** Verified parent pointer: name:file1_link.11, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.11 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.11
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.12 OK
> +*** Verified parent pointer: name:file1_link.12, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.12 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.12
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.13 OK
> +*** Verified parent pointer: name:file1_link.13, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.13 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.13
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.14 OK
> +*** Verified parent pointer: name:file1_link.14, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.14 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.14
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.15 OK
> +*** Verified parent pointer: name:file1_link.15, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.15 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.15
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.16 OK
> +*** Verified parent pointer: name:file1_link.16, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.16 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.16
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.17 OK
> +*** Verified parent pointer: name:file1_link.17, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.17 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.17
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.18 OK
> +*** Verified parent pointer: name:file1_link.18, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.18 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.18
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.19 OK
> +*** Verified parent pointer: name:file1_link.19, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.19 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.19
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.20 OK
> +*** Verified parent pointer: name:file1_link.20, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.20 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.20
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.21 OK
> +*** Verified parent pointer: name:file1_link.21, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.21 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.21
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.22 OK
> +*** Verified parent pointer: name:file1_link.22, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.22 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.22
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.23 OK
> +*** Verified parent pointer: name:file1_link.23, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.23 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.23
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.24 OK
> +*** Verified parent pointer: name:file1_link.24, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.24 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.24
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.25 OK
> +*** Verified parent pointer: name:file1_link.25, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.25 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.25
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.26 OK
> +*** Verified parent pointer: name:file1_link.26, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.26 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.26
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.27 OK
> +*** Verified parent pointer: name:file1_link.27, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.27 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.27
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.28 OK
> +*** Verified parent pointer: name:file1_link.28, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.28 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.28
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.29 OK
> +*** Verified parent pointer: name:file1_link.29, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.29 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.29
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.30 OK
> +*** Verified parent pointer: name:file1_link.30, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.30 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.30
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.31 OK
> +*** Verified parent pointer: name:file1_link.31, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.31 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.31
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.32 OK
> +*** Verified parent pointer: name:file1_link.32, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.32 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.32
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.33 OK
> +*** Verified parent pointer: name:file1_link.33, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.33 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.33
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.34 OK
> +*** Verified parent pointer: name:file1_link.34, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.34 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.34
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.35 OK
> +*** Verified parent pointer: name:file1_link.35, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.35 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.35
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.36 OK
> +*** Verified parent pointer: name:file1_link.36, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.36 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.36
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.37 OK
> +*** Verified parent pointer: name:file1_link.37, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.37 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.37
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.38 OK
> +*** Verified parent pointer: name:file1_link.38, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.38 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.38
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.39 OK
> +*** Verified parent pointer: name:file1_link.39, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.39 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.39
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.40 OK
> +*** Verified parent pointer: name:file1_link.40, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.40 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.40
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.41 OK
> +*** Verified parent pointer: name:file1_link.41, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.41 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.41
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.42 OK
> +*** Verified parent pointer: name:file1_link.42, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.42 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.42
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.43 OK
> +*** Verified parent pointer: name:file1_link.43, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.43 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.43
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.44 OK
> +*** Verified parent pointer: name:file1_link.44, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.44 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.44
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.45 OK
> +*** Verified parent pointer: name:file1_link.45, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.45 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.45
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.46 OK
> +*** Verified parent pointer: name:file1_link.46, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.46 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.46
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.47 OK
> +*** Verified parent pointer: name:file1_link.47, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.47 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.47
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.48 OK
> +*** Verified parent pointer: name:file1_link.48, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.48 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.48
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.49 OK
> +*** Verified parent pointer: name:file1_link.49, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.49 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.49
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.50 OK
> +*** Verified parent pointer: name:file1_link.50, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.50 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.50
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.51 OK
> +*** Verified parent pointer: name:file1_link.51, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.51 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.51
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.52 OK
> +*** Verified parent pointer: name:file1_link.52, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.52 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.52
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.53 OK
> +*** Verified parent pointer: name:file1_link.53, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.53 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.53
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.54 OK
> +*** Verified parent pointer: name:file1_link.54, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.54 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.54
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.55 OK
> +*** Verified parent pointer: name:file1_link.55, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.55 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.55
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.56 OK
> +*** Verified parent pointer: name:file1_link.56, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.56 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.56
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.57 OK
> +*** Verified parent pointer: name:file1_link.57, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.57 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.57
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.58 OK
> +*** Verified parent pointer: name:file1_link.58, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.58 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.58
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.59 OK
> +*** Verified parent pointer: name:file1_link.59, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.59 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.59
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.60 OK
> +*** Verified parent pointer: name:file1_link.60, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.60 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.60
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.61 OK
> +*** Verified parent pointer: name:file1_link.61, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.61 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.61
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.62 OK
> +*** Verified parent pointer: name:file1_link.62, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.62 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.62
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.63 OK
> +*** Verified parent pointer: name:file1_link.63, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.63 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.63
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.64 OK
> +*** Verified parent pointer: name:file1_link.64, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.64 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.64
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.65 OK
> +*** Verified parent pointer: name:file1_link.65, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.65 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.65
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.66 OK
> +*** Verified parent pointer: name:file1_link.66, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.66 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.66
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.67 OK
> +*** Verified parent pointer: name:file1_link.67, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.67 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.67
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.68 OK
> +*** Verified parent pointer: name:file1_link.68, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.68 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.68
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.69 OK
> +*** Verified parent pointer: name:file1_link.69, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.69 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.69
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.70 OK
> +*** Verified parent pointer: name:file1_link.70, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.70 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.70
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.71 OK
> +*** Verified parent pointer: name:file1_link.71, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.71 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.71
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.72 OK
> +*** Verified parent pointer: name:file1_link.72, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.72 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.72
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.73 OK
> +*** Verified parent pointer: name:file1_link.73, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.73 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.73
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.74 OK
> +*** Verified parent pointer: name:file1_link.74, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.74 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.74
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.75 OK
> +*** Verified parent pointer: name:file1_link.75, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.75 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.75
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.76 OK
> +*** Verified parent pointer: name:file1_link.76, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.76 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.76
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.77 OK
> +*** Verified parent pointer: name:file1_link.77, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.77 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.77
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.78 OK
> +*** Verified parent pointer: name:file1_link.78, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.78 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.78
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.79 OK
> +*** Verified parent pointer: name:file1_link.79, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.79 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.79
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.80 OK
> +*** Verified parent pointer: name:file1_link.80, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.80 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.80
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.81 OK
> +*** Verified parent pointer: name:file1_link.81, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.81 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.81
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.82 OK
> +*** Verified parent pointer: name:file1_link.82, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.82 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.82
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.83 OK
> +*** Verified parent pointer: name:file1_link.83, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.83 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.83
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.84 OK
> +*** Verified parent pointer: name:file1_link.84, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.84 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.84
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.85 OK
> +*** Verified parent pointer: name:file1_link.85, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.85 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.85
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.86 OK
> +*** Verified parent pointer: name:file1_link.86, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.86 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.86
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.87 OK
> +*** Verified parent pointer: name:file1_link.87, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.87 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.87
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.88 OK
> +*** Verified parent pointer: name:file1_link.88, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.88 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.88
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.89 OK
> +*** Verified parent pointer: name:file1_link.89, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.89 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.89
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.90 OK
> +*** Verified parent pointer: name:file1_link.90, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.90 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.90
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.91 OK
> +*** Verified parent pointer: name:file1_link.91, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.91 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.91
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.92 OK
> +*** Verified parent pointer: name:file1_link.92, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.92 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.92
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.93 OK
> +*** Verified parent pointer: name:file1_link.93, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.93 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.93
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.94 OK
> +*** Verified parent pointer: name:file1_link.94, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.94 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.94
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.95 OK
> +*** Verified parent pointer: name:file1_link.95, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.95 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.95
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.96 OK
> +*** Verified parent pointer: name:file1_link.96, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.96 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.96
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.97 OK
> +*** Verified parent pointer: name:file1_link.97, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.97 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.97
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.98 OK
> +*** Verified parent pointer: name:file1_link.98, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.98 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.98
> +*** testfolder1 OK
> +*** testfolder1/file1 OK
> +*** testfolder1/file1_link.99 OK
> +*** Verified parent pointer: name:file1_link.99, namelen:13
> +*** Parent pointer OK for child testfolder1/file1
> +*** testfolder1 OK
> +*** testfolder1/file1_link.99 OK
> +*** testfolder1/file1 OK
> +*** Verified parent pointer: name:file1, namelen:5
> +*** Parent pointer OK for child testfolder1/file1_link.99
> -- 
> 2.25.1
> 


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

* Re: [PATCH v3 1/4] common: add helpers for parent pointer tests
  2022-11-01  6:18   ` Zorro Lang
@ 2022-11-02 23:02     ` Catherine Hoang
  0 siblings, 0 replies; 13+ messages in thread
From: Catherine Hoang @ 2022-11-02 23:02 UTC (permalink / raw)
  To: Zorro Lang; +Cc: linux-xfs, fstests

> On Oct 31, 2022, at 11:18 PM, Zorro Lang <zlang@redhat.com> wrote:
> 
> On Fri, Oct 28, 2022 at 02:56:02PM -0700, Catherine Hoang wrote:
>> From: Allison Henderson <allison.henderson@oracle.com>
>> 
>> Add helper functions in common/parent to parse and verify parent
>> pointers. Also add functions to check that mkfs, kernel, and xfs_io
>> support parent pointers.
>> 
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>> ---
> 
> Looks good to me, just a few typo problem as below ...

Thanks for the reviews! I’ll fix the typos in the next version
> 
>> common/parent | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> common/rc     |   3 +
>> common/xfs    |  12 +++
>> 3 files changed, 213 insertions(+)
>> create mode 100644 common/parent
>> 
>> diff --git a/common/parent b/common/parent
>> new file mode 100644
>> index 00000000..a0ba7d92
>> --- /dev/null
>> +++ b/common/parent
>> @@ -0,0 +1,198 @@
>> +#
>> +# Parent pointer common functions
>> +#
>> +
>> +#
>> +# parse_parent_pointer parents parent_inode parent_pointer_name
>> +#
>> +# Given a list of parent pointers, find the record that matches
>> +# the given inode and filename
>> +#
>> +# inputs:
>> +# parents	: A list of parent pointers in the format of:
>> +#		  inode/generation/name_length/name
>> +# parent_inode	: The parent inode to search for
>> +# parent_name	: The parent name to search for
>> +#
>> +# outputs:
>> +# PPINO         : Parent pointer inode
>> +# PPGEN         : Parent pointer generation
>> +# PPNAME        : Parent pointer name
>> +# PPNAME_LEN    : Parent pointer name length
>> +#
>> +_parse_parent_pointer()
>> +{
>> +	local parents=$1
>> +	local pino=$2
>> +	local parent_pointer_name=$3
>> +
>> +	local found=0
>> +
>> +	# Find the entry that has the same inode as the parent
>> +	# and parse out the entry info
>> +	while IFS=\/ read PPINO PPGEN PPNAME_LEN PPNAME; do
>> +		if [ "$PPINO" != "$pino" ]; then
>> +			continue
>> +		fi
>> +
>> +		if [ "$PPNAME" != "$parent_pointer_name" ]; then
>> +			continue
>> +		fi
>> +
>> +		found=1
>> +		break
>> +	done <<< $(echo "$parents")
>> +
>> +	# Check to see if we found anything
>> +	# We do not fail the test because we also use this
>> +	# routine to verify when parent pointers should
>> +	# be removed or updated  (ie a rename or a move
>> +	# operation changes your parent pointer)
>> +	if [ $found -eq "0" ]; then
>> +		return 1
>> +	fi
>> +
>> +	# Verify the parent pointer name length is correct
>> +	if [ "$PPNAME_LEN" -ne "${#parent_pointer_name}" ]
>> +	then
>> +		echo "*** Bad parent pointer:"\
>> +			"name:$PPNAME, namelen:$PPNAME_LEN"
>> +	fi
>> +
>> +	#return sucess
>> +	return 0
>> +}
>> +
>> +#
>> +# _verify_parent parent_path parent_pointer_name child_path
>> +#
>> +# Verify that the given child path lists the given parent as a parent pointer
>> +# and that the parent pointer name matches the given name
>> +#
>> +# Examples:
>> +#
>> +# #simple example
>> +# mkdir testfolder1
>> +# touch testfolder1/file1
>> +# verify_parent testfolder1 file1 testfolder1/file1
> 
> _verify_parent
> 
>> +#
>> +# # 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
> 
> _verify_parent
> 
>> +#
>> +# # 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_no_parent
> 
>> +#
>> +# 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 d1f3d56b..9fc0a785 100644
>> --- a/common/rc
>> +++ b/common/rc
>> @@ -2539,6 +2539,9 @@ _require_xfs_io_command()
>> 		echo $testio | grep -q "invalid option" && \
>> 			_notrun "xfs_io $command support is missing"
>> 		;;
>> +	"parent")
>> +		testio=`$XFS_IO_PROG -x -c "parent" $TEST_DIR 2>&1`
>> +		;;
>> 	"pwrite")
>> 		# -N (RWF_NOWAIT) only works with direct vectored I/O writes
>> 		local pwrite_opts=" "
>> diff --git a/common/xfs b/common/xfs
>> index 170dd621..7233a2db 100644
>> --- a/common/xfs
>> +++ b/common/xfs
>> @@ -1399,3 +1399,15 @@ _xfs_filter_mkfs()
>> 		print STDOUT "realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX\n";
>> 	}'
>> }
>> +
>> +# this test requires the xfs parent pointers feature
>> +#
>> +_require_xfs_parent()
>> +{
>> +	_scratch_mkfs_xfs_supported -n parent > /dev/null 2>&1 \
>> +		|| _notrun "mkfs.xfs does not support parent pointers"
>> +	_scratch_mkfs_xfs -n parent > /dev/null 2>&1
>> +	_try_scratch_mount >/dev/null 2>&1 \
>> +		|| _notrun "kernel does not support parent pointers"
>> +	_scratch_unmount
>> +}
>> -- 
>> 2.25.1
>> 
> 


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

* Re: [PATCH v3 2/4] xfs: add parent pointer test
  2022-11-01  6:23   ` Zorro Lang
@ 2022-11-02 23:11     ` Catherine Hoang
  2022-11-03  3:32       ` Zorro Lang
  0 siblings, 1 reply; 13+ messages in thread
From: Catherine Hoang @ 2022-11-02 23:11 UTC (permalink / raw)
  To: Zorro Lang; +Cc: linux-xfs, fstests

> On Oct 31, 2022, at 11:23 PM, Zorro Lang <zlang@redhat.com> wrote:
> 
> On Fri, Oct 28, 2022 at 02:56:03PM -0700, Catherine Hoang wrote:
>> From: Allison Henderson <allison.henderson@oracle.com>
>> 
>> Add a test to verify basic parent pointers operations (create, move, link,
>> unlink, rename, overwrite).
>> 
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>> ---
>> doc/group-names.txt |   1 +
>> tests/xfs/554       | 101 ++++++++++++++++++++++++++++++++++++++++++++
>> tests/xfs/554.out   |  59 ++++++++++++++++++++++++++
>> 3 files changed, 161 insertions(+)
>> create mode 100755 tests/xfs/554
>> create mode 100644 tests/xfs/554.out
>> 
>> diff --git a/doc/group-names.txt b/doc/group-names.txt
>> index ef411b5e..8e35c699 100644
>> --- a/doc/group-names.txt
>> +++ b/doc/group-names.txt
>> @@ -77,6 +77,7 @@ nfs4_acl		NFSv4 access control lists
>> nonsamefs		overlayfs layers on different filesystems
>> online_repair		online repair functionality tests
>> other			dumping ground, do not add more tests to this group
>> +parent			Parent pointer tests
>> pattern			specific IO pattern tests
>> perms			access control and permission checking
>> pipe			pipe functionality
>> diff --git a/tests/xfs/554 b/tests/xfs/554
> 
> Hi,
> 
> xfs/554 has been taken, please rebase to the lastest for-next branch, or you
> can a big enough number (e.g. 999) to avoid merging conflict, then I can rename
> the name after merging.

Ah ok, I didn’t see that when I was sending out these tests. I’ll rebase this to the
latest for-next branch
> 
>> new file mode 100755
>> index 00000000..44b77f9d
>> --- /dev/null
>> +++ b/tests/xfs/554
>> @@ -0,0 +1,101 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
>> +#
>> +# FS QA Test 554
>> +#
>> +# simple parent pointer test
>> +#
>> +
>> +. ./common/preamble
>> +_begin_fstest auto quick parent
>> +
>> +# get standard environment, filters and checks
>> +. ./common/parent
>> +
>> +# Modify as appropriate
>> +_supported_fs xfs
>> +_require_scratch
>> +_require_xfs_sysfs debug/larp
> 
> Is debug/larp needed by this case?

I believe the parent pointer code now turns on larp mode automatically,
so it’s probably ok to remove this line since we aren’t explicitly turning
it on in the tests anymore.
> 
>> +_require_xfs_parent
>> +_require_xfs_io_command "parent"
>> +
>> +# real QA test starts here
>> +
>> +# Create a directory tree using a protofile and
>> +# make sure all inodes created have parent pointers
>> +
>> +protofile=$tmp.proto
>> +
>> +cat >$protofile <<EOF
>> +DUMMY1
>> +0 0
>> +: root directory
>> +d--777 3 1
>> +: a directory
>> +testfolder1 d--755 3 1
>> +file1 ---755 3 1 /dev/null
>> +$
>> +: back in the root
>> +testfolder2 d--755 3 1
>> +file2 ---755 3 1 /dev/null
>> +: done
>> +$
>> +EOF
>> +
>> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
>> +	|| _fail "mkfs failed"
>> +_check_scratch_fs
>> +
>> +_scratch_mount >>$seqres.full 2>&1 \
>> +	|| _fail "mount failed"
> 
> _scratch_mount calls _fail() inside.

Ok, will remove this _fail call. Thanks!
> 
> Thanks,
> Zorro
> 
>> +
>> +testfolder1="testfolder1"
>> +testfolder2="testfolder2"
>> +file1="file1"
>> +file2="file2"
>> +file3="file3"
>> +file1_ln="file1_link"
>> +
>> +echo ""
>> +# Create parent pointer test
>> +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
>> +
>> +echo ""
>> +# Move parent pointer test
>> +mv $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder2/$file1
>> +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
>> +
>> +echo ""
>> +# Hard link parent pointer test
>> +ln $SCRATCH_MNT/$testfolder2/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln
>> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
>> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder2/$file1"
>> +_verify_parent "$testfolder2" "$file1"    "$testfolder1/$file1_ln"
>> +_verify_parent "$testfolder2" "$file1"    "$testfolder2/$file1"
>> +
>> +echo ""
>> +# Remove hard link parent pointer test
>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
>> +rm $SCRATCH_MNT/$testfolder2/$file1
>> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
>> +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
>> +
>> +echo ""
>> +# Rename parent pointer test
>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
>> +mv $SCRATCH_MNT/$testfolder1/$file1_ln $SCRATCH_MNT/$testfolder1/$file2
>> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
>> +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
>> +
>> +echo ""
>> +# Over write parent pointer test
>> +touch $SCRATCH_MNT/$testfolder2/$file3
>> +_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3"
>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
>> +mv -f $SCRATCH_MNT/$testfolder2/$file3 $SCRATCH_MNT/$testfolder1/$file2
>> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/xfs/554.out b/tests/xfs/554.out
>> new file mode 100644
>> index 00000000..67ea9f2b
>> --- /dev/null
>> +++ b/tests/xfs/554.out
>> @@ -0,0 +1,59 @@
>> +QA output created by 554
>> +
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1
>> +
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1
>> +
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link
>> +*** testfolder1 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder2/file1
>> +*** testfolder2 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link
>> +*** testfolder2 OK
>> +*** testfolder2/file1 OK
>> +*** testfolder2/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder2/file1
>> +
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link OK
>> +*** testfolder1/file1_link OK
>> +*** Verified parent pointer: name:file1_link, namelen:10
>> +*** Parent pointer OK for child testfolder1/file1_link
>> +*** testfolder1/file1_link OK
>> +
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2
>> +*** testfolder1/file2 OK
>> +
>> +*** testfolder2 OK
>> +*** testfolder2/file3 OK
>> +*** testfolder2/file3 OK
>> +*** Verified parent pointer: name:file3, namelen:5
>> +*** Parent pointer OK for child testfolder2/file3
>> +*** testfolder1 OK
>> +*** testfolder1/file2 OK
>> +*** testfolder1/file2 OK
>> +*** Verified parent pointer: name:file2, namelen:5
>> +*** Parent pointer OK for child testfolder1/file2
>> -- 
>> 2.25.1
>> 
> 


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

* Re: [PATCH v3 3/4] xfs: add multi link parent pointer test
  2022-11-01  6:26   ` Zorro Lang
@ 2022-11-02 23:16     ` Catherine Hoang
  0 siblings, 0 replies; 13+ messages in thread
From: Catherine Hoang @ 2022-11-02 23:16 UTC (permalink / raw)
  To: Zorro Lang; +Cc: linux-xfs, fstests

> On Oct 31, 2022, at 11:26 PM, Zorro Lang <zlang@redhat.com> wrote:
> 
> On Fri, Oct 28, 2022 at 02:56:04PM -0700, Catherine Hoang wrote:
>> From: Allison Henderson <allison.henderson@oracle.com>
>> 
>> Add a test to verify parent pointers while multiple links to a file are
>> created and removed.
>> 
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>> ---
>> tests/xfs/555     |   69 ++++
>> tests/xfs/555.out | 1002 +++++++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 1071 insertions(+)
>> create mode 100755 tests/xfs/555
>> create mode 100644 tests/xfs/555.out
>> 
>> diff --git a/tests/xfs/555 b/tests/xfs/555
>> new file mode 100755
>> index 00000000..02de3f15
>> --- /dev/null
>> +++ b/tests/xfs/555
> 
> Hi,
> 
> xfs/555 is taken too.

Ok, will rebase this
> 
>> @@ -0,0 +1,69 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
>> +#
>> +# FS QA Test 555
>> +#
>> +# multi link parent pointer test
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto quick parent
>> +
>> +# get standard environment, filters and checks
>> +. ./common/parent
>> +
>> +# Modify as appropriate
> 
> This comment can be removed

Sure, I’ll remove this comment
> 
>> +_supported_fs xfs
>> +_require_scratch
>> +_require_xfs_sysfs debug/larp
> 
> Is debug/larp really needed by this case?

This line can probably be removed now (same as the last patch)
> 
>> +_require_xfs_parent
>> +_require_xfs_io_command "parent"
>> +
>> +# real QA test starts here
>> +
>> +# Create a directory tree using a protofile and
>> +# make sure all inodes created have parent pointers
>> +
>> +protofile=$tmp.proto
>> +
>> +cat >$protofile <<EOF
>> +DUMMY1
>> +0 0
>> +: root directory
>> +d--777 3 1
>> +: a directory
>> +testfolder1 d--755 3 1
>> +file1 ---755 3 1 /dev/null
>> +: done
>> +$
>> +EOF
>> +
>> +_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"
> 
> This _fail isn't needed, due to _scratch_mount calls _fail() inside.

Ok, I will remove this _fail call. Thank you!
> 
> Thanks,
> Zorro
> 
>> +
>> +testfolder1="testfolder1"
>> +file1="file1"
>> +file1_ln="file1_link"
>> +
>> +echo ""
>> +# Multi link parent pointer test
>> +NLINKS=100
>> +for (( j=0; j<$NLINKS; j++ )); do
>> +	ln $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln.$j
>> +	_verify_parent "$testfolder1" "$file1_ln.$j" "$testfolder1/$file1"
>> +	_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1_ln.$j"
>> +done
>> +# Multi unlink parent pointer test
>> +for (( j=$NLINKS-1; j<=0; j-- )); do
>> +	ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln.$j)"
>> +	rm $SCRATCH_MNT/$testfolder1/$file1_ln.$j
>> +	_verify_no_parent "$file1_ln.$j" "$ino" "$testfolder1/$file1"
>> +done
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/xfs/555.out b/tests/xfs/555.out
>> new file mode 100644
>> index 00000000..eb63ff3a
>> --- /dev/null
>> +++ b/tests/xfs/555.out
>> @@ -0,0 +1,1002 @@
>> +QA output created by 555
>> +
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** Verified parent pointer: name:file1_link.0, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.0 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.0
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** Verified parent pointer: name:file1_link.1, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.1 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.1
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** Verified parent pointer: name:file1_link.2, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.2 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.2
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** Verified parent pointer: name:file1_link.3, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.3 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.3
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** Verified parent pointer: name:file1_link.4, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.4 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.4
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** Verified parent pointer: name:file1_link.5, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.5 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.5
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** Verified parent pointer: name:file1_link.6, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.6 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.6
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** Verified parent pointer: name:file1_link.7, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.7 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.7
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** Verified parent pointer: name:file1_link.8, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.8 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.8
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** Verified parent pointer: name:file1_link.9, namelen:12
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.9 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.9
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** Verified parent pointer: name:file1_link.10, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.10 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.10
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** Verified parent pointer: name:file1_link.11, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.11 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.11
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** Verified parent pointer: name:file1_link.12, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.12 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.12
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** Verified parent pointer: name:file1_link.13, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.13 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.13
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** Verified parent pointer: name:file1_link.14, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.14 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.14
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** Verified parent pointer: name:file1_link.15, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.15 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.15
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** Verified parent pointer: name:file1_link.16, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.16 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.16
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** Verified parent pointer: name:file1_link.17, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.17 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.17
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** Verified parent pointer: name:file1_link.18, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.18 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.18
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** Verified parent pointer: name:file1_link.19, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.19 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.19
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** Verified parent pointer: name:file1_link.20, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.20 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.20
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** Verified parent pointer: name:file1_link.21, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.21 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.21
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** Verified parent pointer: name:file1_link.22, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.22 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.22
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** Verified parent pointer: name:file1_link.23, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.23 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.23
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** Verified parent pointer: name:file1_link.24, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.24 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.24
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** Verified parent pointer: name:file1_link.25, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.25 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.25
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** Verified parent pointer: name:file1_link.26, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.26 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.26
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** Verified parent pointer: name:file1_link.27, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.27 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.27
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** Verified parent pointer: name:file1_link.28, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.28 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.28
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** Verified parent pointer: name:file1_link.29, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.29 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.29
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** Verified parent pointer: name:file1_link.30, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.30 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.30
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** Verified parent pointer: name:file1_link.31, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.31 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.31
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** Verified parent pointer: name:file1_link.32, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.32 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.32
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** Verified parent pointer: name:file1_link.33, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.33 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.33
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** Verified parent pointer: name:file1_link.34, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.34 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.34
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** Verified parent pointer: name:file1_link.35, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.35 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.35
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** Verified parent pointer: name:file1_link.36, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.36 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.36
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** Verified parent pointer: name:file1_link.37, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.37 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.37
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** Verified parent pointer: name:file1_link.38, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.38 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.38
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** Verified parent pointer: name:file1_link.39, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.39 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.39
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** Verified parent pointer: name:file1_link.40, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.40 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.40
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** Verified parent pointer: name:file1_link.41, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.41 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.41
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** Verified parent pointer: name:file1_link.42, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.42 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.42
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** Verified parent pointer: name:file1_link.43, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.43 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.43
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** Verified parent pointer: name:file1_link.44, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.44 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.44
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** Verified parent pointer: name:file1_link.45, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.45 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.45
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** Verified parent pointer: name:file1_link.46, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.46 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.46
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** Verified parent pointer: name:file1_link.47, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.47 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.47
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** Verified parent pointer: name:file1_link.48, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.48 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.48
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** Verified parent pointer: name:file1_link.49, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.49 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.49
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** Verified parent pointer: name:file1_link.50, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.50 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.50
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** Verified parent pointer: name:file1_link.51, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.51 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.51
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** Verified parent pointer: name:file1_link.52, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.52 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.52
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** Verified parent pointer: name:file1_link.53, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.53 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.53
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** Verified parent pointer: name:file1_link.54, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.54 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.54
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** Verified parent pointer: name:file1_link.55, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.55 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.55
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** Verified parent pointer: name:file1_link.56, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.56 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.56
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** Verified parent pointer: name:file1_link.57, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.57 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.57
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** Verified parent pointer: name:file1_link.58, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.58 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.58
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** Verified parent pointer: name:file1_link.59, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.59 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.59
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** Verified parent pointer: name:file1_link.60, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.60 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.60
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** Verified parent pointer: name:file1_link.61, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.61 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.61
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** Verified parent pointer: name:file1_link.62, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.62 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.62
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** Verified parent pointer: name:file1_link.63, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.63 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.63
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** Verified parent pointer: name:file1_link.64, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.64 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.64
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** Verified parent pointer: name:file1_link.65, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.65 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.65
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** Verified parent pointer: name:file1_link.66, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.66 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.66
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** Verified parent pointer: name:file1_link.67, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.67 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.67
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** Verified parent pointer: name:file1_link.68, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.68 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.68
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** Verified parent pointer: name:file1_link.69, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.69 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.69
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** Verified parent pointer: name:file1_link.70, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.70 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.70
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** Verified parent pointer: name:file1_link.71, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.71 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.71
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** Verified parent pointer: name:file1_link.72, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.72 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.72
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** Verified parent pointer: name:file1_link.73, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.73 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.73
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** Verified parent pointer: name:file1_link.74, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.74 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.74
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** Verified parent pointer: name:file1_link.75, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.75 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.75
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** Verified parent pointer: name:file1_link.76, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.76 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.76
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** Verified parent pointer: name:file1_link.77, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.77 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.77
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** Verified parent pointer: name:file1_link.78, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.78 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.78
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** Verified parent pointer: name:file1_link.79, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.79 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.79
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** Verified parent pointer: name:file1_link.80, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.80 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.80
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** Verified parent pointer: name:file1_link.81, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.81 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.81
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** Verified parent pointer: name:file1_link.82, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.82 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.82
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** Verified parent pointer: name:file1_link.83, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.83 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.83
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** Verified parent pointer: name:file1_link.84, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.84 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.84
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** Verified parent pointer: name:file1_link.85, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.85 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.85
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** Verified parent pointer: name:file1_link.86, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.86 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.86
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** Verified parent pointer: name:file1_link.87, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.87 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.87
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** Verified parent pointer: name:file1_link.88, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.88 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.88
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** Verified parent pointer: name:file1_link.89, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.89 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.89
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** Verified parent pointer: name:file1_link.90, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.90 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.90
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** Verified parent pointer: name:file1_link.91, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.91 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.91
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** Verified parent pointer: name:file1_link.92, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.92 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.92
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** Verified parent pointer: name:file1_link.93, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.93 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.93
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** Verified parent pointer: name:file1_link.94, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.94 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.94
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** Verified parent pointer: name:file1_link.95, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.95 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.95
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** Verified parent pointer: name:file1_link.96, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.96 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.96
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** Verified parent pointer: name:file1_link.97, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.97 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.97
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** Verified parent pointer: name:file1_link.98, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.98 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.98
>> +*** testfolder1 OK
>> +*** testfolder1/file1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** Verified parent pointer: name:file1_link.99, namelen:13
>> +*** Parent pointer OK for child testfolder1/file1
>> +*** testfolder1 OK
>> +*** testfolder1/file1_link.99 OK
>> +*** testfolder1/file1 OK
>> +*** Verified parent pointer: name:file1, namelen:5
>> +*** Parent pointer OK for child testfolder1/file1_link.99
>> -- 
>> 2.25.1
>> 
> 


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

* Re: [PATCH v3 2/4] xfs: add parent pointer test
  2022-11-02 23:11     ` Catherine Hoang
@ 2022-11-03  3:32       ` Zorro Lang
  2022-11-03 23:42         ` Allison Henderson
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-11-03  3:32 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Wed, Nov 02, 2022 at 11:11:30PM +0000, Catherine Hoang wrote:
> > On Oct 31, 2022, at 11:23 PM, Zorro Lang <zlang@redhat.com> wrote:
> > 
> > On Fri, Oct 28, 2022 at 02:56:03PM -0700, Catherine Hoang wrote:
> >> From: Allison Henderson <allison.henderson@oracle.com>
> >> 
> >> Add a test to verify basic parent pointers operations (create, move, link,
> >> unlink, rename, overwrite).
> >> 
> >> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> >> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> >> ---
> >> doc/group-names.txt |   1 +
> >> tests/xfs/554       | 101 ++++++++++++++++++++++++++++++++++++++++++++
> >> tests/xfs/554.out   |  59 ++++++++++++++++++++++++++
> >> 3 files changed, 161 insertions(+)
> >> create mode 100755 tests/xfs/554
> >> create mode 100644 tests/xfs/554.out
> >> 
> >> diff --git a/doc/group-names.txt b/doc/group-names.txt
> >> index ef411b5e..8e35c699 100644
> >> --- a/doc/group-names.txt
> >> +++ b/doc/group-names.txt
> >> @@ -77,6 +77,7 @@ nfs4_acl		NFSv4 access control lists
> >> nonsamefs		overlayfs layers on different filesystems
> >> online_repair		online repair functionality tests
> >> other			dumping ground, do not add more tests to this group
> >> +parent			Parent pointer tests
> >> pattern			specific IO pattern tests
> >> perms			access control and permission checking
> >> pipe			pipe functionality
> >> diff --git a/tests/xfs/554 b/tests/xfs/554
> > 
> > Hi,
> > 
> > xfs/554 has been taken, please rebase to the lastest for-next branch, or you
> > can a big enough number (e.g. 999) to avoid merging conflict, then I can rename
> > the name after merging.
> 
> Ah ok, I didn’t see that when I was sending out these tests. I’ll rebase this to the
> latest for-next branch
> > 
> >> new file mode 100755
> >> index 00000000..44b77f9d
> >> --- /dev/null
> >> +++ b/tests/xfs/554
> >> @@ -0,0 +1,101 @@
> >> +#! /bin/bash
> >> +# SPDX-License-Identifier: GPL-2.0
> >> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> >> +#
> >> +# FS QA Test 554
> >> +#
> >> +# simple parent pointer test
> >> +#
> >> +
> >> +. ./common/preamble
> >> +_begin_fstest auto quick parent
> >> +
> >> +# get standard environment, filters and checks
> >> +. ./common/parent
> >> +
> >> +# Modify as appropriate
> >> +_supported_fs xfs
> >> +_require_scratch
> >> +_require_xfs_sysfs debug/larp
> > 
> > Is debug/larp needed by this case?
> 
> I believe the parent pointer code now turns on larp mode automatically,
> so it’s probably ok to remove this line since we aren’t explicitly turning
> it on in the tests anymore.

Sorry I'm confused about this explanation:) Do you need to read/write the
/sys/fs/xfs/debug/larp in this case? To make sure *parent* feature is 100%
truned on? Can't _require_xfs_parent make sure current system support the
parent feature ?

> > 
> >> +_require_xfs_parent
> >> +_require_xfs_io_command "parent"
> >> +
> >> +# real QA test starts here
> >> +
> >> +# Create a directory tree using a protofile and
> >> +# make sure all inodes created have parent pointers
> >> +
> >> +protofile=$tmp.proto
> >> +
> >> +cat >$protofile <<EOF
> >> +DUMMY1
> >> +0 0
> >> +: root directory
> >> +d--777 3 1
> >> +: a directory
> >> +testfolder1 d--755 3 1
> >> +file1 ---755 3 1 /dev/null
> >> +$
> >> +: back in the root
> >> +testfolder2 d--755 3 1
> >> +file2 ---755 3 1 /dev/null
> >> +: done
> >> +$
> >> +EOF
> >> +
> >> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
> >> +	|| _fail "mkfs failed"
> >> +_check_scratch_fs
> >> +
> >> +_scratch_mount >>$seqres.full 2>&1 \
> >> +	|| _fail "mount failed"
> > 
> > _scratch_mount calls _fail() inside.
> 
> Ok, will remove this _fail call. Thanks!
> > 
> > Thanks,
> > Zorro
> > 
> >> +
> >> +testfolder1="testfolder1"
> >> +testfolder2="testfolder2"
> >> +file1="file1"
> >> +file2="file2"
> >> +file3="file3"
> >> +file1_ln="file1_link"
> >> +
> >> +echo ""
> >> +# Create parent pointer test
> >> +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
> >> +
> >> +echo ""
> >> +# Move parent pointer test
> >> +mv $SCRATCH_MNT/$testfolder1/$file1 $SCRATCH_MNT/$testfolder2/$file1
> >> +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
> >> +
> >> +echo ""
> >> +# Hard link parent pointer test
> >> +ln $SCRATCH_MNT/$testfolder2/$file1 $SCRATCH_MNT/$testfolder1/$file1_ln
> >> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
> >> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder2/$file1"
> >> +_verify_parent "$testfolder2" "$file1"    "$testfolder1/$file1_ln"
> >> +_verify_parent "$testfolder2" "$file1"    "$testfolder2/$file1"
> >> +
> >> +echo ""
> >> +# Remove hard link parent pointer test
> >> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
> >> +rm $SCRATCH_MNT/$testfolder2/$file1
> >> +_verify_parent "$testfolder1" "$file1_ln" "$testfolder1/$file1_ln"
> >> +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
> >> +
> >> +echo ""
> >> +# Rename parent pointer test
> >> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
> >> +mv $SCRATCH_MNT/$testfolder1/$file1_ln $SCRATCH_MNT/$testfolder1/$file2
> >> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> >> +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
> >> +
> >> +echo ""
> >> +# Over write parent pointer test
> >> +touch $SCRATCH_MNT/$testfolder2/$file3
> >> +_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3"
> >> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
> >> +mv -f $SCRATCH_MNT/$testfolder2/$file3 $SCRATCH_MNT/$testfolder1/$file2
> >> +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> >> +
> >> +# success, all done
> >> +status=0
> >> +exit
> >> diff --git a/tests/xfs/554.out b/tests/xfs/554.out
> >> new file mode 100644
> >> index 00000000..67ea9f2b
> >> --- /dev/null
> >> +++ b/tests/xfs/554.out
> >> @@ -0,0 +1,59 @@
> >> +QA output created by 554
> >> +
> >> +*** testfolder1 OK
> >> +*** testfolder1/file1 OK
> >> +*** testfolder1/file1 OK
> >> +*** Verified parent pointer: name:file1, namelen:5
> >> +*** Parent pointer OK for child testfolder1/file1
> >> +
> >> +*** testfolder2 OK
> >> +*** testfolder2/file1 OK
> >> +*** testfolder2/file1 OK
> >> +*** Verified parent pointer: name:file1, namelen:5
> >> +*** Parent pointer OK for child testfolder2/file1
> >> +
> >> +*** testfolder1 OK
> >> +*** testfolder1/file1_link OK
> >> +*** testfolder1/file1_link OK
> >> +*** Verified parent pointer: name:file1_link, namelen:10
> >> +*** Parent pointer OK for child testfolder1/file1_link
> >> +*** testfolder1 OK
> >> +*** testfolder2/file1 OK
> >> +*** testfolder1/file1_link OK
> >> +*** Verified parent pointer: name:file1_link, namelen:10
> >> +*** Parent pointer OK for child testfolder2/file1
> >> +*** testfolder2 OK
> >> +*** testfolder1/file1_link OK
> >> +*** testfolder2/file1 OK
> >> +*** Verified parent pointer: name:file1, namelen:5
> >> +*** Parent pointer OK for child testfolder1/file1_link
> >> +*** testfolder2 OK
> >> +*** testfolder2/file1 OK
> >> +*** testfolder2/file1 OK
> >> +*** Verified parent pointer: name:file1, namelen:5
> >> +*** Parent pointer OK for child testfolder2/file1
> >> +
> >> +*** testfolder1 OK
> >> +*** testfolder1/file1_link OK
> >> +*** testfolder1/file1_link OK
> >> +*** Verified parent pointer: name:file1_link, namelen:10
> >> +*** Parent pointer OK for child testfolder1/file1_link
> >> +*** testfolder1/file1_link OK
> >> +
> >> +*** testfolder1 OK
> >> +*** testfolder1/file2 OK
> >> +*** testfolder1/file2 OK
> >> +*** Verified parent pointer: name:file2, namelen:5
> >> +*** Parent pointer OK for child testfolder1/file2
> >> +*** testfolder1/file2 OK
> >> +
> >> +*** testfolder2 OK
> >> +*** testfolder2/file3 OK
> >> +*** testfolder2/file3 OK
> >> +*** Verified parent pointer: name:file3, namelen:5
> >> +*** Parent pointer OK for child testfolder2/file3
> >> +*** testfolder1 OK
> >> +*** testfolder1/file2 OK
> >> +*** testfolder1/file2 OK
> >> +*** Verified parent pointer: name:file2, namelen:5
> >> +*** Parent pointer OK for child testfolder1/file2
> >> -- 
> >> 2.25.1
> >> 
> > 
> 


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

* Re: [PATCH v3 2/4] xfs: add parent pointer test
  2022-11-03  3:32       ` Zorro Lang
@ 2022-11-03 23:42         ` Allison Henderson
  0 siblings, 0 replies; 13+ messages in thread
From: Allison Henderson @ 2022-11-03 23:42 UTC (permalink / raw)
  To: Catherine Hoang, zlang; +Cc: fstests, linux-xfs

On Thu, 2022-11-03 at 11:32 +0800, Zorro Lang wrote:
> On Wed, Nov 02, 2022 at 11:11:30PM +0000, Catherine Hoang wrote:
> > > On Oct 31, 2022, at 11:23 PM, Zorro Lang <zlang@redhat.com>
> > > wrote:
> > > 
> > > On Fri, Oct 28, 2022 at 02:56:03PM -0700, Catherine Hoang wrote:
> > > > From: Allison Henderson <allison.henderson@oracle.com>
> > > > 
> > > > Add a test to verify basic parent pointers operations (create,
> > > > move, link,
> > > > unlink, rename, overwrite).
> > > > 
> > > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> > > > ---
> > > > doc/group-names.txt |   1 +
> > > > tests/xfs/554       | 101
> > > > ++++++++++++++++++++++++++++++++++++++++++++
> > > > tests/xfs/554.out   |  59 ++++++++++++++++++++++++++
> > > > 3 files changed, 161 insertions(+)
> > > > create mode 100755 tests/xfs/554
> > > > create mode 100644 tests/xfs/554.out
> > > > 
> > > > diff --git a/doc/group-names.txt b/doc/group-names.txt
> > > > index ef411b5e..8e35c699 100644
> > > > --- a/doc/group-names.txt
> > > > +++ b/doc/group-names.txt
> > > > @@ -77,6 +77,7 @@ nfs4_acl              NFSv4 access control
> > > > lists
> > > > nonsamefs               overlayfs layers on different
> > > > filesystems
> > > > online_repair           online repair functionality tests
> > > > other                   dumping ground, do not add more tests
> > > > to this group
> > > > +parent                 Parent pointer tests
> > > > pattern                 specific IO pattern tests
> > > > perms                   access control and permission checking
> > > > pipe                    pipe functionality
> > > > diff --git a/tests/xfs/554 b/tests/xfs/554
> > > 
> > > Hi,
> > > 
> > > xfs/554 has been taken, please rebase to the lastest for-next
> > > branch, or you
> > > can a big enough number (e.g. 999) to avoid merging conflict,
> > > then I can rename
> > > the name after merging.
> > 
> > Ah ok, I didn’t see that when I was sending out these tests. I’ll
> > rebase this to the
> > latest for-next branch
> > > 
> > > > new file mode 100755
> > > > index 00000000..44b77f9d
> > > > --- /dev/null
> > > > +++ b/tests/xfs/554
> > > > @@ -0,0 +1,101 @@
> > > > +#! /bin/bash
> > > > +# SPDX-License-Identifier: GPL-2.0
> > > > +# Copyright (c) 2022, Oracle and/or its affiliates.  All
> > > > Rights Reserved.
> > > > +#
> > > > +# FS QA Test 554
> > > > +#
> > > > +# simple parent pointer test
> > > > +#
> > > > +
> > > > +. ./common/preamble
> > > > +_begin_fstest auto quick parent
> > > > +
> > > > +# get standard environment, filters and checks
> > > > +. ./common/parent
> > > > +
> > > > +# Modify as appropriate
> > > > +_supported_fs xfs
> > > > +_require_scratch
> > > > +_require_xfs_sysfs debug/larp
> > > 
> > > Is debug/larp needed by this case?
> > 
> > I believe the parent pointer code now turns on larp mode
> > automatically,
> > so it’s probably ok to remove this line since we aren’t explicitly
> > turning
> > it on in the tests anymore.
> 
> Sorry I'm confused about this explanation:) Do you need to read/write
> the
> /sys/fs/xfs/debug/larp in this case? 
No, you only have to do that if you want ALL attributes to be logged. 
If the fs was created with the parent mkfs option, then parent pointer
attributes (at least) will be logged.  

Unlike normal attrs, parent pointers cannot be toggled.  So once they
are enabled at mkfs time, they will always be logged regardless as to
whether the standard attributes are being logged or not.


> To make sure *parent* feature is 100%
> truned on? Can't _require_xfs_parent make sure current system support
> the
> parent feature ?
Yes, basically the _require_xfs_parent routine ensures the the parent
mkfs option is there and works :-)


> 
> > > 
> > > > +_require_xfs_parent
> > > > +_require_xfs_io_command "parent"
> > > > +
> > > > +# real QA test starts here
> > > > +
> > > > +# Create a directory tree using a protofile and
> > > > +# make sure all inodes created have parent pointers
> > > > +
> > > > +protofile=$tmp.proto
> > > > +
> > > > +cat >$protofile <<EOF
> > > > +DUMMY1
> > > > +0 0
> > > > +: root directory
> > > > +d--777 3 1
> > > > +: a directory
> > > > +testfolder1 d--755 3 1
> > > > +file1 ---755 3 1 /dev/null
> > > > +$
> > > > +: back in the root
> > > > +testfolder2 d--755 3 1
> > > > +file2 ---755 3 1 /dev/null
> > > > +: done
> > > > +$
> > > > +EOF
> > > > +
> > > > +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1
> > > > \
> > > > +       || _fail "mkfs failed"
> > > > +_check_scratch_fs
> > > > +
> > > > +_scratch_mount >>$seqres.full 2>&1 \
> > > > +       || _fail "mount failed"
> > > 
> > > _scratch_mount calls _fail() inside.
> > 
> > Ok, will remove this _fail call. Thanks!
> > > 
> > > Thanks,
> > > Zorro
> > > 
> > > > +
> > > > +testfolder1="testfolder1"
> > > > +testfolder2="testfolder2"
> > > > +file1="file1"
> > > > +file2="file2"
> > > > +file3="file3"
> > > > +file1_ln="file1_link"
> > > > +
> > > > +echo ""
> > > > +# Create parent pointer test
> > > > +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
> > > > +
> > > > +echo ""
> > > > +# Move parent pointer test
> > > > +mv $SCRATCH_MNT/$testfolder1/$file1
> > > > $SCRATCH_MNT/$testfolder2/$file1
> > > > +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
> > > > +
> > > > +echo ""
> > > > +# Hard link parent pointer test
> > > > +ln $SCRATCH_MNT/$testfolder2/$file1
> > > > $SCRATCH_MNT/$testfolder1/$file1_ln
> > > > +_verify_parent "$testfolder1" "$file1_ln"
> > > > "$testfolder1/$file1_ln"
> > > > +_verify_parent "$testfolder1" "$file1_ln"
> > > > "$testfolder2/$file1"
> > > > +_verify_parent "$testfolder2" "$file1"   
> > > > "$testfolder1/$file1_ln"
> > > > +_verify_parent "$testfolder2" "$file1"   
> > > > "$testfolder2/$file1"
> > > > +
> > > > +echo ""
> > > > +# Remove hard link parent pointer test
> > > > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
> > > > +rm $SCRATCH_MNT/$testfolder2/$file1
> > > > +_verify_parent "$testfolder1" "$file1_ln"
> > > > "$testfolder1/$file1_ln"
> > > > +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
> > > > +
> > > > +echo ""
> > > > +# Rename parent pointer test
> > > > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
> > > > +mv $SCRATCH_MNT/$testfolder1/$file1_ln
> > > > $SCRATCH_MNT/$testfolder1/$file2
> > > > +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> > > > +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
> > > > +
> > > > +echo ""
> > > > +# Over write parent pointer test
> > > > +touch $SCRATCH_MNT/$testfolder2/$file3
> > > > +_verify_parent "$testfolder2" "$file3" "$testfolder2/$file3"
> > > > +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
> > > > +mv -f $SCRATCH_MNT/$testfolder2/$file3
> > > > $SCRATCH_MNT/$testfolder1/$file2
> > > > +_verify_parent "$testfolder1" "$file2" "$testfolder1/$file2"
> > > > +
> > > > +# success, all done
> > > > +status=0
> > > > +exit
> > > > diff --git a/tests/xfs/554.out b/tests/xfs/554.out
> > > > new file mode 100644
> > > > index 00000000..67ea9f2b
> > > > --- /dev/null
> > > > +++ b/tests/xfs/554.out
> > > > @@ -0,0 +1,59 @@
> > > > +QA output created by 554
> > > > +
> > > > +*** testfolder1 OK
> > > > +*** testfolder1/file1 OK
> > > > +*** testfolder1/file1 OK
> > > > +*** Verified parent pointer: name:file1, namelen:5
> > > > +*** Parent pointer OK for child testfolder1/file1
> > > > +
> > > > +*** testfolder2 OK
> > > > +*** testfolder2/file1 OK
> > > > +*** testfolder2/file1 OK
> > > > +*** Verified parent pointer: name:file1, namelen:5
> > > > +*** Parent pointer OK for child testfolder2/file1
> > > > +
> > > > +*** testfolder1 OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** Verified parent pointer: name:file1_link, namelen:10
> > > > +*** Parent pointer OK for child testfolder1/file1_link
> > > > +*** testfolder1 OK
> > > > +*** testfolder2/file1 OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** Verified parent pointer: name:file1_link, namelen:10
> > > > +*** Parent pointer OK for child testfolder2/file1
> > > > +*** testfolder2 OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** testfolder2/file1 OK
> > > > +*** Verified parent pointer: name:file1, namelen:5
> > > > +*** Parent pointer OK for child testfolder1/file1_link
> > > > +*** testfolder2 OK
> > > > +*** testfolder2/file1 OK
> > > > +*** testfolder2/file1 OK
> > > > +*** Verified parent pointer: name:file1, namelen:5
> > > > +*** Parent pointer OK for child testfolder2/file1
> > > > +
> > > > +*** testfolder1 OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** testfolder1/file1_link OK
> > > > +*** Verified parent pointer: name:file1_link, namelen:10
> > > > +*** Parent pointer OK for child testfolder1/file1_link
> > > > +*** testfolder1/file1_link OK
> > > > +
> > > > +*** testfolder1 OK
> > > > +*** testfolder1/file2 OK
> > > > +*** testfolder1/file2 OK
> > > > +*** Verified parent pointer: name:file2, namelen:5
> > > > +*** Parent pointer OK for child testfolder1/file2
> > > > +*** testfolder1/file2 OK
> > > > +
> > > > +*** testfolder2 OK
> > > > +*** testfolder2/file3 OK
> > > > +*** testfolder2/file3 OK
> > > > +*** Verified parent pointer: name:file3, namelen:5
> > > > +*** Parent pointer OK for child testfolder2/file3
> > > > +*** testfolder1 OK
> > > > +*** testfolder1/file2 OK
> > > > +*** testfolder1/file2 OK
> > > > +*** Verified parent pointer: name:file2, namelen:5
> > > > +*** Parent pointer OK for child testfolder1/file2
> > > > -- 
> > > > 2.25.1
> > > > 
> > > 
> > 
> 


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

end of thread, other threads:[~2022-11-03 23:43 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-28 21:56 [PATCH v3 0/4] xfstests: add parent pointer tests Catherine Hoang
2022-10-28 21:56 ` [PATCH v3 1/4] common: add helpers for " Catherine Hoang
2022-11-01  6:18   ` Zorro Lang
2022-11-02 23:02     ` Catherine Hoang
2022-10-28 21:56 ` [PATCH v3 2/4] xfs: add parent pointer test Catherine Hoang
2022-11-01  6:23   ` Zorro Lang
2022-11-02 23:11     ` Catherine Hoang
2022-11-03  3:32       ` Zorro Lang
2022-11-03 23:42         ` Allison Henderson
2022-10-28 21:56 ` [PATCH v3 3/4] xfs: add multi link " Catherine Hoang
2022-11-01  6:26   ` Zorro Lang
2022-11-02 23:16     ` Catherine Hoang
2022-10-28 21:56 ` [PATCH v3 4/4] xfs: add parent pointer inject test Catherine Hoang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).