Re: [PATCH v1 1/1] xfstests: Add parent pointer test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On Sep 22, 2022, at 5:53 PM, Zorro Lang <zlang@xxxxxxxxxx> wrote:
> 
> On Thu, Sep 22, 2022 at 06:45:09PM +0000, Allison Henderson wrote:
>> On Fri, 2022-09-23 at 00:37 +0800, Zorro Lang wrote:
>>> On Tue, Jun 14, 2022 at 03:01:29PM -0700, Catherine Hoang wrote:
>>>> From: Allison Henderson <allison.henderson@xxxxxxxxxx>
>>>> 
>>>> This patch adds a test for basic parent pointer operations,
>>>> including link, unlink, rename, overwrite, hardlinks and
>>>> error inject.
>>>> 
>>>> Signed-off-by: Allison Henderson <allison.henderson@xxxxxxxxxx>
>>>> Signed-off-by: Catherine Hoang <catherine.hoang@xxxxxxxxxx>
>>>> ---
>>>>  common/parent       |  196 +++++++++
>>>>  common/rc           |    3 +
>>>>  doc/group-names.txt |    1 +
>>>>  tests/xfs/547       |  126 ++++++
>>>>  tests/xfs/547.out   |   59 +++
>>>>  tests/xfs/548       |   97 +++++
>>>>  tests/xfs/548.out   | 1002
>>>> +++++++++++++++++++++++++++++++++++++++++++
>>>>  tests/xfs/549       |  110 +++++
>>>>  tests/xfs/549.out   |   14 +
>>>>  9 files changed, 1608 insertions(+)
>>>>  create mode 100644 common/parent
>>>>  create mode 100755 tests/xfs/547
>>>>  create mode 100644 tests/xfs/547.out
>>>>  create mode 100755 tests/xfs/548
>>>>  create mode 100644 tests/xfs/548.out
>>>>  create mode 100755 tests/xfs/549
>>>>  create mode 100644 tests/xfs/549.out
>>>> 
>>>> diff --git a/common/parent b/common/parent
>>>> new file mode 100644
>>>> index 00000000..0af12553
>>>> --- /dev/null
>>>> +++ b/common/parent
>>>> @@ -0,0 +1,196 @@
>>>> +#
>>>> +# Parent pointer common functions
>>>> +#
>>>> +
>>>> +#
>>>> +# parse_parent_pointer parents parent_inode parent_pointer_name
>>>> +#
>>>> +# Given a list of parent pointers, find the record that matches
>>>> +# the given inode and filename
>>>> +#
>>>> +# inputs:
>>>> +# parents      : A list of parent pointers in the format of:
>>>> +#                inode/generation/name_length/name
>>>> +# parent_inode : The parent inode to search for
>>>> +# parent_name  : The parent name to search for
>>>> +#
>>>> +# outputs:
>>>> +# PPINO         : Parent pointer inode
>>>> +# PPGEN         : Parent pointer generation
>>>> +# PPNAME        : Parent pointer name
>>>> +# PPNAME_LEN    : Parent pointer name length
>>>> +#
>>>> +_parse_parent_pointer()
>>>> +{
>>>> +       local parents=$1
>>>> +       local pino=$2
>>>> +       local parent_pointer_name=$3
>>>> +
>>>> +       local found=0
>>>> +
>>>> +       # Find the entry that has the same inode as the parent
>>>> +       # and parse out the entry info
>>>> +       while IFS=\/ read PPINO PPGEN PPNAME_LEN PPNAME; do
>>>> +               if [ "$PPINO" != "$pino" ]; then
>>>> +                       continue
>>>> +               fi
>>>> +
>>>> +               if [ "$PPNAME" != "$parent_pointer_name" ]; then
>>>> +                       continue
>>>> +               fi
>>>> +
>>>> +               found=1
>>>> +               break
>>>> +       done <<< $(echo "$parents")
>>>> +
>>>> +       # Check to see if we found anything
>>>> +       # We do not fail the test because we also use this
>>>> +       # routine to verify when parent pointers should
>>>> +       # be removed or updated  (ie a rename or a move
>>>> +       # operation changes your parent pointer)
>>>> +       if [ $found -eq "0" ]; then
>>>> +               return 1
>>>> +       fi
>>>> +
>>>> +       # Verify the parent pointer name length is correct
>>>> +       if [ "$PPNAME_LEN" -ne "${#parent_pointer_name}" ]
>>>> +       then
>>>> +               _fail "Bad parent pointer reclen"
>>>> +       fi
>>>> +
>>>> +       #return sucess
>>>> +       return 0
>>>> +}
>>>> +
>>>> +#
>>>> +# _verify_parent parent_path parent_pointer_name child_path
>>>> +#
>>>> +# Verify that the given child path lists the given parent as a
>>>> parent pointer
>>>> +# and that the parent pointer name matches the given name
>>>> +#
>>>> +# Examples:
>>>> +#
>>>> +# #simple example
>>>> +# mkdir testfolder1
>>>> +# touch testfolder1/file1
>>>> +# verify_parent testfolder1 file1 testfolder1/file1
>>>> +#
>>>> +# # In this above example, we want to verify that "testfolder1"
>>>> +# # appears as a parent pointer of "testfolder1/file1". 
>>>> Additionally
>>>> +# # we verify that the name record of the parent pointer is
>>>> "file1"
>>>> +#
>>>> +#
>>>> +# #hardlink example
>>>> +# mkdir testfolder1
>>>> +# mkdir testfolder2
>>>> +# touch testfolder1/file1
>>>> +# ln testfolder1/file1 testfolder2/file1_ln
>>>> +# verify_parent testfolder2 file1_ln testfolder1/file1
>>>> +#
>>>> +# # In this above example, we want to verify that "testfolder2"
>>>> +# # appears as a parent pointer of "testfolder1/file1". 
>>>> Additionally
>>>> +# # we verify that the name record of the parent pointer is
>>>> "file1_ln"
>>>> +#
>>>> +_verify_parent()
>>>> +{
>>>> +
> 
> useless empty line ^^
> 
>>>> +       local parent_path=$1
>>>> +       local parent_pointer_name=$2
>>>> +       local child_path=$3
>>>> +
>>>> +       local parent_ppath="$parent_path/$parent_pointer_name"
>>>> +
>>>> +       # Verify parent exists
>>>> +       if [ ! -d $SCRATCH_MNT/$parent_path ]; then
>>>> +               _fail "$SCRATCH_MNT/$parent_path not found"
>>>> +       else
>>>> +               echo "*** $parent_path OK"
>>>> +       fi
>>>> +
>>>> +       # Verify child exists
>>>> +       if [ ! -f $SCRATCH_MNT/$child_path ]; then
>>>> +               _fail "$SCRATCH_MNT/$child_path not found"
>>>> +       else
>>>> +               echo "*** $child_path OK"
>>>> +       fi
>>>> +
>>>> +       # Verify the parent pointer name exists as a child of the
>>>> parent
>>>> +       if [ ! -f $SCRATCH_MNT/$parent_ppath ]; then
>>>> +               _fail "$SCRATCH_MNT/$parent_ppath not found"
>>>> +       else
>>>> +               echo "*** $parent_ppath OK"
>>>> +       fi
>>>> +
>>>> +       # Get the inodes of both parent and child
>>>> +       pino="$(stat -c '%i' $SCRATCH_MNT/$parent_path)"
>>>> +       cino="$(stat -c '%i' $SCRATCH_MNT/$child_path)"
>>>> +
>>>> +       # Get all the parent pointers of the child
>>>> +       parents=($($XFS_IO_PROG -x -c "parent -f -i $pino -n
>>>> $parent_pointer_name" $SCRATCH_MNT/$child_path))
>>>> +       if [[ $? != 0 ]]; then
>>>> +                _fail "No parent pointers found for $child_path"
>>>> +       fi
>>>> +
>>>> +       # Parse parent pointer output.
>>>> +       # This sets PPINO PPGEN PPNAME PPNAME_LEN
>>>> +       _parse_parent_pointer $parents $pino $parent_pointer_name
>>>> +
>>>> +       # If we didnt find one, bail out
>>>> +       if [ $? -ne 0 ]; then
>>>> +               _fail "No parent pointer record found for
>>>> $parent_path in $child_path"
>>>> +       fi
>>>> +
>>>> +       # Verify the inode generated by the parent pointer name is
>>>> +       # the same as the child inode
>>>> +       pppino="$(stat -c '%i' $SCRATCH_MNT/$parent_ppath)"
>>>> +       if [ $cino -ne $pppino ]
>>>> +       then
>>>> +               _fail "Bad parent pointer name value for
>>>> $child_path."\
>>>> +                               "$SCRATCH_MNT/$parent_ppath belongs
>>>> to inode $PPPINO, but should be $cino"
>>>> +       fi
>>>> +
>>>> +       echo "*** Verified parent pointer:"\
>>>> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
>>>> +       echo "*** Parent pointer OK for child $child_path"
>>>> +}
>>>> +
>>>> +#
>>>> +# _verify_parent parent_pointer_name pino child_path
>>>> +#
>>>> +# Verify that the given child path contains no parent pointer
>>>> entry
>>>> +# for the given inode and file name
>>>> +#
>>>> +_verify_no_parent()
>>>> +{
>>>> +
> 
> empty line at beginning too, is it a code style?

Will remove these lines, thanks for catching that.
> 
>>>> +       local parent_pname=$1
>>>> +       local pino=$2
>>>> +       local child_path=$3
>>>> +
>>>> +       # Verify child exists
>>>> +       if [ ! -f $SCRATCH_MNT/$child_path ]; then
>>>> +               _fail "$SCRATCH_MNT/$child_path not found"
>>>> +       else
>>>> +               echo "*** $child_path OK"
>>>> +       fi
>>>> +
>>>> +       # Get all the parent pointers of the child
>>>> +       local parents=($($XFS_IO_PROG -x -c "parent -f -i $pino -n
>>>> $parent_pname" $SCRATCH_MNT/$child_path))
>>> 
>>> I didn't see anywhere (in this patch) call `_require_xfs_io_command
>>> parent`.
>>> Shouldn't we make sure the "parent" feature is support by userspace
>>> and
>>> kernel both?
>> Sure, I think you're right, we can add "_require_xfs_io_command parent"
>> at the top of the tests
> 
> Thanks, by the way, can you separate this patch to 3~4 patches as a patchset,
> it's a little hard for me to go through this long patch and page up and down
> to review sometimes :)

Sure, I’ll split up these tests next time.
> 
>> 
>>> 
>>>> +       if [[ $? != 0 ]]; then
>>>> +               return 0
>>>> +       fi
>>>> +
>>>> +       # Parse parent pointer output.
>>>> +       # This sets PPINO PPGEN PPNAME PPNAME_LEN
>>>> +       _parse_parent_pointer $parents $pino $parent_pname
>>>> +
>>>> +       # If we didnt find one, return sucess
>>>> +       if [ $? -ne 0 ]; then
>>>> +               return 0
>>>> +       fi
>>>> +
>>>> +       _fail "Parent pointer entry found where none should:"\
>>>> +                       "inode:$PPINO, gen:$PPGEN,"
>>>> +                       "name:$PPNAME, namelen:$PPNAME_LEN"
>>>> +}
>>>> +
>>>> diff --git a/common/rc b/common/rc
>>>> index 4201a059..68752cdc 100644
>>>> --- a/common/rc
>>>> +++ b/common/rc
>>>> @@ -2701,6 +2701,9 @@ _require_xfs_io_command()
>>>>                 echo $testio | grep -q "invalid option" && \
>>>>                         _notrun "xfs_io $command support is
>>>> missing"
>>>>                 ;;
>>>> +       "parent")
>>>> +               testio=`$XFS_IO_PROG -x -c "parent" $TEST_DIR 2>&1`
>>>> +               ;;
>>>>         "pwrite")
>>>>                 # -N (RWF_NOWAIT) only works with direct vectored
>>>> I/O writes
>>>>                 local pwrite_opts=" "
>>>> diff --git a/doc/group-names.txt b/doc/group-names.txt
>>>> index e8e3477e..98bbe3b7 100644
>>>> --- a/doc/group-names.txt
>>>> +++ b/doc/group-names.txt
>>>> @@ -77,6 +77,7 @@ nfs4_acl              NFSv4 access control lists
>>>>  nonsamefs              overlayfs layers on different filesystems
>>>>  online_repair          online repair functionality tests
>>>>  other                  dumping ground, do not add more tests to
>>>> this group
>>>> +parent                 Parent pointer tests
>>>>  pattern                        specific IO pattern tests
>>>>  perms                  access control and permission checking
>>>>  pipe                   pipe functionality
>>>> diff --git a/tests/xfs/547 b/tests/xfs/547
>>>> new file mode 100755
>>>> index 00000000..5c7d1d45
>>>> --- /dev/null
>>>> +++ b/tests/xfs/547
>>>> @@ -0,0 +1,126 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>>> Reserved.
>>>> +#
>>>> +# FS QA Test 547
>>>> +#
>>>> +# simple parent pointer test
>>>> +#
>>>> +
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +full()
>>>> +{
>>>> +    echo ""            >>$seqres.full
>>>> +    echo "*** $* ***"  >>$seqres.full
>>>> +    echo ""            >>$seqres.full
>>>> +}
>>>> +
>>>> +# get standard environment, filters and checks
>>>> +. ./common/filter
>>>> +. ./common/reflink
>>>> +. ./common/inject
>>>> +. ./common/parent
>>>> +
>>>> +# Modify as appropriate
>>>> +_supported_fs xfs
>>>> +_require_scratch
>>>> +_require_xfs_sysfs debug/larp
>>>> +_require_xfs_io_error_injection "larp"
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
> 
> I remembered last time you backup the value of the xfs/debug/larp, then restore
> it in cleanup, refer to xfs/018 (it might be recommended by Dave?).
> 
>>>> +
>>>> +# real QA test starts here
>>>> +
>>>> +# Create a directory tree using a protofile and
>>>> +# make sure all inodes created have parent pointers
>>>> +
>>>> +protofile=$tmp.proto
>>>> +
>>>> +cat >$protofile <<EOF
>>>> +DUMMY1
>>>> +0 0
>>>> +: root directory
>>>> +d--777 3 1
>>>> +: a directory
>>>> +testfolder1 d--755 3 1
>>>> +file1 ---755 3 1 /dev/null
>>>> +$
>>>> +: back in the root
>>>> +testfolder2 d--755 3 1
>>>> +file2 ---755 3 1 /dev/null
>>>> +: done
>>>> +$
>>>> +EOF
>>>> +
>>>> +if [ $? -ne 0 ]
>>>> +then
>>>> +    _fail "failed to create test protofile"
>>>> +fi
>>>> +
>>>> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
>>>> +       || _fail "mkfs failed"
>>> 
>>> I think we'd better to check if current fs userspace and kernel
>>> support
>>> "parent" feature. If it's supported, then we should report failure if
>>> mkfs fails. Or we should skip the test before real testing start.
>>> (same
>>> below)
>> Alrighty, we can add a _require_xfs_mkfs_parent function over in
>> common/xfs
> 
> I'm wondering if old kernel can mount xfs with "parent=1"? If not, we need
> a _require_xfs_parent. For example we have below 3 function in common/xfs:
> 
> _require_xfs_mkfs_crc : check if current mkfs.xfs support crc=1 option
> _require_xfs_crc : check if current kernel can mount a xfs with crc=1
> _require_scratch_xfs_crc : check if current SCRATCH_DEV is crc enabled
> 
> As the parent feature isn't big as crc feature, so I think you can refer
> to _require_xfs_sparse_inodes or _require_xfs_nrext64, check mkfs and kernel
> support parent feature in one function. Then you can use:
> 
>  _require_xfs_parent # check mkfs and kernel/mount support parent feature
>  _require_xfs_io_command parent # check if xfs_io support parent command
> 
> at the beginning of each cases.

Ok, that makes sense. I’ll add those functions. Thanks for the explanation!
> 
> 
> 
> Thanks,
> Zorro
> 
>> 
>> Thanks for the reviews!
>> Allison
>> 
>>> 
>>> Thanks,
>>> Zorro
>>> 
>>>> +_check_scratch_fs
>>>> +
>>>> +_scratch_mount >>$seqres.full 2>&1 \
>>>> +       || _fail "mount failed"
>>>> +
>>>> +testfolder1="testfolder1"
>>>> +testfolder2="testfolder2"
>>>> +file1="file1"
>>>> +file2="file2"
>>>> +file3="file3"
>>>> +file4="file4"
>>>> +file5="file5"
>>>> +file1_ln="file1_link"
>>>> +
>>>> +echo ""
>>>> +# Create parent pointer test
>>>> +_verify_parent "$testfolder1" "$file1" "$testfolder1/$file1"
>>>> +
>>>> +echo ""
>>>> +# Move parent pointer test
>>>> +mv $SCRATCH_MNT/$testfolder1/$file1
>>>> $SCRATCH_MNT/$testfolder2/$file1
>>>> +_verify_parent "$testfolder2" "$file1" "$testfolder2/$file1"
>>>> +
>>>> +echo ""
>>>> +# Hard link parent pointer test
>>>> +ln $SCRATCH_MNT/$testfolder2/$file1
>>>> $SCRATCH_MNT/$testfolder1/$file1_ln
>>>> +_verify_parent "$testfolder1" "$file1_ln" 
>>>> "$testfolder1/$file1_ln"
>>>> +_verify_parent "$testfolder1" "$file1_ln"  "$testfolder2/$file1"
>>>> +_verify_parent "$testfolder2" "$file1"    
>>>> "$testfolder1/$file1_ln"
>>>> +_verify_parent "$testfolder2" "$file1"     "$testfolder2/$file1"
>>>> +
>>>> +echo ""
>>>> +# Remove hard link parent pointer test
>>>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file1)"
>>>> +rm $SCRATCH_MNT/$testfolder2/$file1
>>>> +_verify_parent    "$testfolder1" "$file1_ln"
>>>> "$testfolder1/$file1_ln"
>>>> +_verify_no_parent "$file1" "$ino" "$testfolder1/$file1_ln"
>>>> +
>>>> +echo ""
>>>> +# Rename parent pointer test
>>>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder1/$file1_ln)"
>>>> +mv $SCRATCH_MNT/$testfolder1/$file1_ln
>>>> $SCRATCH_MNT/$testfolder1/$file2
>>>> +_verify_parent    "$testfolder1" "$file2"    "$testfolder1/$file2"
>>>> +_verify_no_parent "$file1_ln" "$ino" "$testfolder1/$file2"
>>>> +
>>>> +echo ""
>>>> +# Over write parent pointer test
>>>> +touch $SCRATCH_MNT/$testfolder2/$file3
>>>> +_verify_parent    "$testfolder2" "$file3"    "$testfolder2/$file3"
>>>> +ino="$(stat -c '%i' $SCRATCH_MNT/$testfolder2/$file3)"
>>>> +mv -f $SCRATCH_MNT/$testfolder2/$file3
>>>> $SCRATCH_MNT/$testfolder1/$file2
>>>> +_verify_parent    "$testfolder1" "$file2"    "$testfolder1/$file2"
>>>> +
>>>> +# success, all done
>>>> +status=0
>>>> +exit
>>>> diff --git a/tests/xfs/547.out b/tests/xfs/547.out
>>>> new file mode 100644
>>>> index 00000000..e0ce9e65
>>>> --- /dev/null
>>>> +++ b/tests/xfs/547.out
>>>> @@ -0,0 +1,59 @@
>>>> +QA output created by 547
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +
>>>> +*** testfolder2 OK
>>>> +*** testfolder2/file1 OK
>>>> +*** testfolder2/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder2/file1
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** Verified parent pointer: name:file1_link, namelen:10
>>>> +*** Parent pointer OK for child testfolder1/file1_link
>>>> +*** testfolder1 OK
>>>> +*** testfolder2/file1 OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** Verified parent pointer: name:file1_link, namelen:10
>>>> +*** Parent pointer OK for child testfolder2/file1
>>>> +*** testfolder2 OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** testfolder2/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link
>>>> +*** testfolder2 OK
>>>> +*** testfolder2/file1 OK
>>>> +*** testfolder2/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder2/file1
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** testfolder1/file1_link OK
>>>> +*** Verified parent pointer: name:file1_link, namelen:10
>>>> +*** Parent pointer OK for child testfolder1/file1_link
>>>> +*** testfolder1/file1_link OK
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file2 OK
>>>> +*** testfolder1/file2 OK
>>>> +*** Verified parent pointer: name:file2, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file2
>>>> +*** testfolder1/file2 OK
>>>> +
>>>> +*** testfolder2 OK
>>>> +*** testfolder2/file3 OK
>>>> +*** testfolder2/file3 OK
>>>> +*** Verified parent pointer: name:file3, namelen:5
>>>> +*** Parent pointer OK for child testfolder2/file3
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file2 OK
>>>> +*** testfolder1/file2 OK
>>>> +*** Verified parent pointer: name:file2, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file2
>>>> diff --git a/tests/xfs/548 b/tests/xfs/548
>>>> new file mode 100755
>>>> index 00000000..229d871a
>>>> --- /dev/null
>>>> +++ b/tests/xfs/548
>>>> @@ -0,0 +1,97 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>>> Reserved.
>>>> +#
>>>> +# FS QA Test 548
>>>> +#
>>>> +# multi link parent pointer test
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +full()
>>>> +{
>>>> +    echo ""            >>$seqres.full
>>>> +    echo "*** $* ***"  >>$seqres.full
>>>> +    echo ""            >>$seqres.full
>>>> +}
>>>> +
>>>> +# get standard environment, filters and checks
>>>> +. ./common/filter
>>>> +. ./common/reflink
>>>> +. ./common/inject
>>>> +. ./common/parent
>>>> +
>>>> +# Modify as appropriate
>>>> +_supported_fs xfs
>>>> +_require_scratch
>>>> +_require_xfs_io_error_injection "larp"
>>>> +_require_xfs_sysfs debug/larp
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
>>>> +
>>>> +# real QA test starts here
>>>> +
>>>> +# Create a directory tree using a protofile and
>>>> +# make sure all inodes created have parent pointers
>>>> +
>>>> +protofile=$tmp.proto
>>>> +
>>>> +cat >$protofile <<EOF
>>>> +DUMMY1
>>>> +0 0
>>>> +: root directory
>>>> +d--777 3 1
>>>> +: a directory
>>>> +testfolder1 d--755 3 1
>>>> +file1 ---755 3 1 /dev/null
>>>> +: done
>>>> +$
>>>> +EOF
>>>> +
>>>> +if [ $? -ne 0 ]
>>>> +then
>>>> +    _fail "failed to create test protofile"
>>>> +fi
>>>> +
>>>> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqresres.full 2>&1
>>>> \
>>>> +       || _fail "mkfs failed"
>>>> +_check_scratch_fs
>>>> +
>>>> +_scratch_mount >>$seqres.full 2>&1 \
>>>> +       || _fail "mount failed"
>>>> +
>>>> +testfolder1="testfolder1"
>>>> +testfolder2="testfolder2"
>>>> +file1="file1"
>>>> +file2="file2"
>>>> +file3="file3"
>>>> +file4="file4"
>>>> +file5="file5"
>>>> +file1_ln="file1_link"
>>>> +
>>>> +echo ""
>>>> +# Multi link parent pointer test
>>>> +NLINKS=100
>>>> +for (( j=0; j<$NLINKS; j++ )); do
>>>> +       ln $SCRATCH_MNT/$testfolder1/$file1
>>>> $SCRATCH_MNT/$testfolder1/$file1_ln.$j
>>>> +       _verify_parent    "$testfolder1" "$file1_ln.$j"   
>>>> "$testfolder1/$file1"
>>>> +       _verify_parent    "$testfolder1" "$file1"         
>>>> "$testfolder1/$file1_ln.$j"
>>>> +done
>>>> +# Multi unlink parent pointer test
>>>> +for (( j=$NLINKS-1; j<=0; j-- )); do
>>>> +       ino="$(stat -c '%i'
>>>> $SCRATCH_MNT/$testfolder1/$file1_ln.$j)"
>>>> +       rm $SCRATCH_MNT/$testfolder1/$file1_ln.$j
>>>> +       _verify_no_parent "$file1_ln.$j" "$ino"
>>>> "$testfolder1/$file1"
>>>> +done
>>>> +
>>>> +# success, all done
>>>> +status=0
>>>> +exit
>>>> diff --git a/tests/xfs/548.out b/tests/xfs/548.out
>>>> new file mode 100644
>>>> index 00000000..afdc083b
>>>> --- /dev/null
>>>> +++ b/tests/xfs/548.out
>>>> @@ -0,0 +1,1002 @@
>>>> +QA output created by 548
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.0 OK
>>>> +*** Verified parent pointer: name:file1_link.0, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.0 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.0
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.1 OK
>>>> +*** Verified parent pointer: name:file1_link.1, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.2 OK
>>>> +*** Verified parent pointer: name:file1_link.2, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.2 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.2
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.3 OK
>>>> +*** Verified parent pointer: name:file1_link.3, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.3 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.3
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.4 OK
>>>> +*** Verified parent pointer: name:file1_link.4, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.4 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.4
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.5 OK
>>>> +*** Verified parent pointer: name:file1_link.5, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.5 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.5
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.6 OK
>>>> +*** Verified parent pointer: name:file1_link.6, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.6 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.6
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.7 OK
>>>> +*** Verified parent pointer: name:file1_link.7, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.7 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.7
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.8 OK
>>>> +*** Verified parent pointer: name:file1_link.8, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.8 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.8
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.9 OK
>>>> +*** Verified parent pointer: name:file1_link.9, namelen:12
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.9 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.9
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.10 OK
>>>> +*** Verified parent pointer: name:file1_link.10, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.10 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.10
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.11 OK
>>>> +*** Verified parent pointer: name:file1_link.11, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.11 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.11
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.12 OK
>>>> +*** Verified parent pointer: name:file1_link.12, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.12 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.12
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.13 OK
>>>> +*** Verified parent pointer: name:file1_link.13, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.13 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.13
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.14 OK
>>>> +*** Verified parent pointer: name:file1_link.14, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.14 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.14
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.15 OK
>>>> +*** Verified parent pointer: name:file1_link.15, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.15 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.15
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.16 OK
>>>> +*** Verified parent pointer: name:file1_link.16, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.16 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.16
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.17 OK
>>>> +*** Verified parent pointer: name:file1_link.17, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.17 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.17
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.18 OK
>>>> +*** Verified parent pointer: name:file1_link.18, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.18 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.18
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.19 OK
>>>> +*** Verified parent pointer: name:file1_link.19, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.19 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.19
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.20 OK
>>>> +*** Verified parent pointer: name:file1_link.20, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.20 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.20
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.21 OK
>>>> +*** Verified parent pointer: name:file1_link.21, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.21 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.21
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.22 OK
>>>> +*** Verified parent pointer: name:file1_link.22, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.22 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.22
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.23 OK
>>>> +*** Verified parent pointer: name:file1_link.23, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.23 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.23
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.24 OK
>>>> +*** Verified parent pointer: name:file1_link.24, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.24 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.24
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.25 OK
>>>> +*** Verified parent pointer: name:file1_link.25, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.25 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.25
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.26 OK
>>>> +*** Verified parent pointer: name:file1_link.26, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.26 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.26
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.27 OK
>>>> +*** Verified parent pointer: name:file1_link.27, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.27 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.27
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.28 OK
>>>> +*** Verified parent pointer: name:file1_link.28, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.28 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.28
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.29 OK
>>>> +*** Verified parent pointer: name:file1_link.29, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.29 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.29
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.30 OK
>>>> +*** Verified parent pointer: name:file1_link.30, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.30 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.30
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.31 OK
>>>> +*** Verified parent pointer: name:file1_link.31, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.31 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.31
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.32 OK
>>>> +*** Verified parent pointer: name:file1_link.32, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.32 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.32
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.33 OK
>>>> +*** Verified parent pointer: name:file1_link.33, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.33 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.33
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.34 OK
>>>> +*** Verified parent pointer: name:file1_link.34, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.34 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.34
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.35 OK
>>>> +*** Verified parent pointer: name:file1_link.35, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.35 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.35
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.36 OK
>>>> +*** Verified parent pointer: name:file1_link.36, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.36 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.36
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.37 OK
>>>> +*** Verified parent pointer: name:file1_link.37, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.37 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.37
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.38 OK
>>>> +*** Verified parent pointer: name:file1_link.38, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.38 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.38
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.39 OK
>>>> +*** Verified parent pointer: name:file1_link.39, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.39 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.39
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.40 OK
>>>> +*** Verified parent pointer: name:file1_link.40, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.40 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.40
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.41 OK
>>>> +*** Verified parent pointer: name:file1_link.41, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.41 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.41
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.42 OK
>>>> +*** Verified parent pointer: name:file1_link.42, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.42 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.42
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.43 OK
>>>> +*** Verified parent pointer: name:file1_link.43, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.43 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.43
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.44 OK
>>>> +*** Verified parent pointer: name:file1_link.44, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.44 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.44
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.45 OK
>>>> +*** Verified parent pointer: name:file1_link.45, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.45 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.45
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.46 OK
>>>> +*** Verified parent pointer: name:file1_link.46, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.46 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.46
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.47 OK
>>>> +*** Verified parent pointer: name:file1_link.47, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.47 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.47
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.48 OK
>>>> +*** Verified parent pointer: name:file1_link.48, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.48 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.48
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.49 OK
>>>> +*** Verified parent pointer: name:file1_link.49, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.49 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.49
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.50 OK
>>>> +*** Verified parent pointer: name:file1_link.50, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.50 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.50
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.51 OK
>>>> +*** Verified parent pointer: name:file1_link.51, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.51 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.51
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.52 OK
>>>> +*** Verified parent pointer: name:file1_link.52, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.52 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.52
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.53 OK
>>>> +*** Verified parent pointer: name:file1_link.53, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.53 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.53
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.54 OK
>>>> +*** Verified parent pointer: name:file1_link.54, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.54 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.54
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.55 OK
>>>> +*** Verified parent pointer: name:file1_link.55, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.55 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.55
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.56 OK
>>>> +*** Verified parent pointer: name:file1_link.56, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.56 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.56
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.57 OK
>>>> +*** Verified parent pointer: name:file1_link.57, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.57 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.57
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.58 OK
>>>> +*** Verified parent pointer: name:file1_link.58, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.58 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.58
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.59 OK
>>>> +*** Verified parent pointer: name:file1_link.59, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.59 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.59
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.60 OK
>>>> +*** Verified parent pointer: name:file1_link.60, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.60 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.60
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.61 OK
>>>> +*** Verified parent pointer: name:file1_link.61, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.61 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.61
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.62 OK
>>>> +*** Verified parent pointer: name:file1_link.62, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.62 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.62
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.63 OK
>>>> +*** Verified parent pointer: name:file1_link.63, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.63 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.63
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.64 OK
>>>> +*** Verified parent pointer: name:file1_link.64, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.64 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.64
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.65 OK
>>>> +*** Verified parent pointer: name:file1_link.65, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.65 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.65
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.66 OK
>>>> +*** Verified parent pointer: name:file1_link.66, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.66 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.66
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.67 OK
>>>> +*** Verified parent pointer: name:file1_link.67, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.67 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.67
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.68 OK
>>>> +*** Verified parent pointer: name:file1_link.68, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.68 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.68
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.69 OK
>>>> +*** Verified parent pointer: name:file1_link.69, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.69 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.69
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.70 OK
>>>> +*** Verified parent pointer: name:file1_link.70, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.70 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.70
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.71 OK
>>>> +*** Verified parent pointer: name:file1_link.71, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.71 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.71
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.72 OK
>>>> +*** Verified parent pointer: name:file1_link.72, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.72 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.72
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.73 OK
>>>> +*** Verified parent pointer: name:file1_link.73, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.73 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.73
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.74 OK
>>>> +*** Verified parent pointer: name:file1_link.74, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.74 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.74
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.75 OK
>>>> +*** Verified parent pointer: name:file1_link.75, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.75 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.75
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.76 OK
>>>> +*** Verified parent pointer: name:file1_link.76, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.76 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.76
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.77 OK
>>>> +*** Verified parent pointer: name:file1_link.77, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.77 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.77
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.78 OK
>>>> +*** Verified parent pointer: name:file1_link.78, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.78 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.78
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.79 OK
>>>> +*** Verified parent pointer: name:file1_link.79, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.79 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.79
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.80 OK
>>>> +*** Verified parent pointer: name:file1_link.80, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.80 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.80
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.81 OK
>>>> +*** Verified parent pointer: name:file1_link.81, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.81 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.81
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.82 OK
>>>> +*** Verified parent pointer: name:file1_link.82, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.82 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.82
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.83 OK
>>>> +*** Verified parent pointer: name:file1_link.83, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.83 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.83
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.84 OK
>>>> +*** Verified parent pointer: name:file1_link.84, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.84 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.84
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.85 OK
>>>> +*** Verified parent pointer: name:file1_link.85, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.85 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.85
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.86 OK
>>>> +*** Verified parent pointer: name:file1_link.86, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.86 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.86
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.87 OK
>>>> +*** Verified parent pointer: name:file1_link.87, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.87 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.87
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.88 OK
>>>> +*** Verified parent pointer: name:file1_link.88, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.88 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.88
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.89 OK
>>>> +*** Verified parent pointer: name:file1_link.89, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.89 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.89
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.90 OK
>>>> +*** Verified parent pointer: name:file1_link.90, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.90 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.90
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.91 OK
>>>> +*** Verified parent pointer: name:file1_link.91, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.91 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.91
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.92 OK
>>>> +*** Verified parent pointer: name:file1_link.92, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.92 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.92
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.93 OK
>>>> +*** Verified parent pointer: name:file1_link.93, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.93 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.93
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.94 OK
>>>> +*** Verified parent pointer: name:file1_link.94, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.94 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.94
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.95 OK
>>>> +*** Verified parent pointer: name:file1_link.95, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.95 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.95
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.96 OK
>>>> +*** Verified parent pointer: name:file1_link.96, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.96 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.96
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.97 OK
>>>> +*** Verified parent pointer: name:file1_link.97, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.97 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.97
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.98 OK
>>>> +*** Verified parent pointer: name:file1_link.98, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.98 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.98
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** testfolder1/file1_link.99 OK
>>>> +*** Verified parent pointer: name:file1_link.99, namelen:13
>>>> +*** Parent pointer OK for child testfolder1/file1
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file1_link.99 OK
>>>> +*** testfolder1/file1 OK
>>>> +*** Verified parent pointer: name:file1, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file1_link.99
>>>> diff --git a/tests/xfs/549 b/tests/xfs/549
>>>> new file mode 100755
>>>> index 00000000..e8e74b8a
>>>> --- /dev/null
>>>> +++ b/tests/xfs/549
>>>> @@ -0,0 +1,110 @@
>>>> +#! /bin/bash
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights
>>>> Reserved.
>>>> +#
>>>> +# FS QA Test 549
>>>> +#
>>>> +# parent pointer inject test
>>>> +#
>>>> +. ./common/preamble
>>>> +_begin_fstest auto quick parent
>>>> +
>>>> +cleanup()
>>>> +{
>>>> +       cd /
>>>> +       rm -f $tmp.*
>>>> +       echo 0 > /sys/fs/xfs/debug/larp
>>>> +}
>>>> +
>>>> +full()
>>>> +{
>>>> +    echo ""            >>$seqres.full
>>>> +    echo "*** $* ***"  >>$seqres.full
>>>> +    echo ""            >>$seqres.full
>>>> +}
>>>> +
>>>> +# get standard environment, filters and checks
>>>> +. ./common/filter
>>>> +. ./common/reflink
>>>> +. ./common/inject
>>>> +. ./common/parent
>>>> +
>>>> +# Modify as appropriate
>>>> +_supported_fs xfs
>>>> +_require_scratch
>>>> +_require_xfs_sysfs debug/larp
>>>> +_require_xfs_io_error_injection "larp"
>>>> +
>>>> +echo 1 > /sys/fs/xfs/debug/larp
>>>> +
>>>> +# real QA test starts here
>>>> +
>>>> +# Create a directory tree using a protofile and
>>>> +# make sure all inodes created have parent pointers
>>>> +
>>>> +protofile=$tmp.proto
>>>> +
>>>> +cat >$protofile <<EOF
>>>> +DUMMY1
>>>> +0 0
>>>> +: root directory
>>>> +d--777 3 1
>>>> +: a directory
>>>> +testfolder1 d--755 3 1
>>>> +file1 ---755 3 1 /dev/null
>>>> +$
>>>> +: back in the root
>>>> +testfolder2 d--755 3 1
>>>> +file2 ---755 3 1 /dev/null
>>>> +: done
>>>> +$
>>>> +EOF
>>>> +
>>>> +if [ $? -ne 0 ]
>>>> +then
>>>> +    _fail "failed to create test protofile"
>>>> +fi
>>>> +
>>>> +_scratch_mkfs -f -n parent=1 -p $protofile >>$seqres.full 2>&1 \
>>>> +       || _fail "mkfs failed"
>>>> +_check_scratch_fs
>>>> +
>>>> +_scratch_mount >>$seqres.full 2>&1 \
>>>> +       || _fail "mount failed"
>>>> +
>>>> +testfolder1="testfolder1"
>>>> +testfolder2="testfolder2"
>>>> +file1="file1"
>>>> +file2="file2"
>>>> +file3="file3"
>>>> +file4="file4"
>>>> +file5="file5"
>>>> +file1_ln="file1_link"
>>>> +
>>>> +echo ""
>>>> +
>>>> +# Create files
>>>> +touch $SCRATCH_MNT/$testfolder1/$file4
>>>> +_verify_parent    "$testfolder1" "$file4" "$testfolder1/$file4"
>>>> +
>>>> +# Inject error
>>>> +_scratch_inject_error "larp"
>>>> +
>>>> +# Move files
>>>> +mv $SCRATCH_MNT/$testfolder1/$file4
>>>> $SCRATCH_MNT/$testfolder2/$file5 2>&1 | _filter_scratch
>>>> +
>>>> +# FS should be shut down, touch will fail
>>>> +touch $SCRATCH_MNT/$testfolder2/$file5 2>&1 | _filter_scratch
>>>> +
>>>> +# Remount to replay log
>>>> +_scratch_remount_dump_log >> $seqres.full
>>>> +
>>>> +# FS should be online, touch should succeed
>>>> +touch $SCRATCH_MNT/$testfolder2/$file5
>>>> +
>>>> +# Check files again
>>>> +_verify_parent    "$testfolder2" "$file5" "$testfolder2/$file5"
>>>> +
>>>> +# success, all done
>>>> +status=0
>>>> +exit
>>>> diff --git a/tests/xfs/549.out b/tests/xfs/549.out
>>>> new file mode 100644
>>>> index 00000000..1af49c73
>>>> --- /dev/null
>>>> +++ b/tests/xfs/549.out
>>>> @@ -0,0 +1,14 @@
>>>> +QA output created by 549
>>>> +
>>>> +*** testfolder1 OK
>>>> +*** testfolder1/file4 OK
>>>> +*** testfolder1/file4 OK
>>>> +*** Verified parent pointer: name:file4, namelen:5
>>>> +*** Parent pointer OK for child testfolder1/file4
>>>> +mv: cannot stat 'SCRATCH_MNT/testfolder1/file4': Input/output
>>>> error
>>>> +touch: cannot touch 'SCRATCH_MNT/testfolder2/file5': Input/output
>>>> error
>>>> +*** testfolder2 OK
>>>> +*** testfolder2/file5 OK
>>>> +*** testfolder2/file5 OK
>>>> +*** Verified parent pointer: name:file5, namelen:5
>>>> +*** Parent pointer OK for child testfolder2/file5
>>>> -- 
>>>> 2.25.1
>>>> 
>>> 
>> 
> 





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux