From patchwork Fri May 26 02:02:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256212 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 856DEC7EE29 for ; Fri, 26 May 2023 02:02:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231344AbjEZCCe (ORCPT ); Thu, 25 May 2023 22:02:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44596 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236327AbjEZCCY (ORCPT ); Thu, 25 May 2023 22:02:24 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B2A31A4; Thu, 25 May 2023 19:02:23 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D5A096179C; Fri, 26 May 2023 02:02:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3CDC0C433EF; Fri, 26 May 2023 02:02:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066542; bh=LH5q+aSG98FcQV9OMtAWhsX747vXiHbVLa2jpTrhpWc=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=raJxYajexebn25381gGqCY12HxqjilR0SlzUiYyrwZN8VJKl3v+c4bRK6GlXY/S+V PBJD9333v7/QRM/J9U6yFZZLr0RVJ1bA3Qk4eWS2pvVYikcKXw6s5GOjIyWTFhilJb WqUiaFNVBX35UV+mrKOQ+Su+WOUezlRL5+J4d70EN1+pkEMj1SzPrGhyhOXc5fSIyq olAAsrzNfveeMnI/a2XkMTvS6+wGv8Q4uAsFyL4nxY9+BHDHEWUz/DLXR3Ivmm+Jlq k++d4AtFsD4M7i6pZI56i0MyI3j5LYc828SyfcCyZQz1sJasq0b2PvtoMSigZ/Qh0u ki1iGuU74gVyA== Date: Thu, 25 May 2023 19:02:21 -0700 Subject: [PATCH 01/11] xfs/206: filter out the parent= status from mkfs From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060861.3732476.3517693645871830366.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong Filter out the parent pointer bits from the mkfs output so that we don't cause a regression in this test. Signed-off-by: Darrick J. Wong --- tests/xfs/206 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/xfs/206 b/tests/xfs/206 index cb346b6dc9..af86570a81 100755 --- a/tests/xfs/206 +++ b/tests/xfs/206 @@ -64,7 +64,8 @@ mkfs_filter() -e "s/\(sunit=\)\([0-9]* blks,\)/\10 blks,/" \ -e "s/, lazy-count=[0-9]//" \ -e "/.*crc=/d" \ - -e "/^Default configuration/d" + -e "/^Default configuration/d" \ + -e '/parent=/d' } # mkfs slightly smaller than that, small log for speed. From patchwork Fri May 26 02:02:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256213 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0B47C7EE29 for ; Fri, 26 May 2023 02:02:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234388AbjEZCCl (ORCPT ); Thu, 25 May 2023 22:02:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229944AbjEZCCj (ORCPT ); Thu, 25 May 2023 22:02:39 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E0E89A3; Thu, 25 May 2023 19:02:38 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 71B8E64C4C; Fri, 26 May 2023 02:02:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE471C433EF; Fri, 26 May 2023 02:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066557; bh=M/6Dya24VqVWqWcNd/upkKp9opJZ4q0M0/xVZ8L7TwQ=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=Fmmux+iBN2sKcTcDEYzHOxaGaWFAsO9cXFFiREL92mhVXpP/O2bxkMBmiT/lJdeDv 1U/sIgBanROVJXrdlaX8XsKJd9LSKs4+BGKxntxLXSuCZezJ2hBEKQCbek93WukLdj oSa8odFOQe3GJSa48E/nSUzIgN9BtvW1e0nlGXPeSZmoNhCy0e3987S316Rn614FpG KyUuP4+BjDBUiVW68vqfci95dF47Munel4dVHU/CjcbUbzJWLB4MdTaSfSdZW74Qig HvoRiTFvjhhUyc/ZDeiIPtUp+URrDem2XL82GQHouK1qMagUB6Lk+v1JE4e5wj6MkG 8NAJq4jT+4c4g== Date: Thu, 25 May 2023 19:02:37 -0700 Subject: [PATCH 02/11] xfs/122: update for parent pointers From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060875.3732476.5529675243629156281.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong Update test for parent pointers. Signed-off-by: Darrick J. Wong --- tests/xfs/122.out | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/xfs/122.out b/tests/xfs/122.out index 89f7b735b0..55138218dd 100644 --- a/tests/xfs/122.out +++ b/tests/xfs/122.out @@ -98,6 +98,8 @@ sizeof(struct xfs_fsop_ag_resblks) = 64 sizeof(struct xfs_fsop_geom) = 256 sizeof(struct xfs_fsop_geom_v1) = 112 sizeof(struct xfs_fsop_geom_v4) = 112 +sizeof(struct xfs_getparents) = 96 +sizeof(struct xfs_getparents_rec) = 24 sizeof(struct xfs_icreate_log) = 28 sizeof(struct xfs_inode_log_format) = 56 sizeof(struct xfs_inode_log_format_32) = 52 @@ -107,6 +109,7 @@ sizeof(struct xfs_legacy_timestamp) = 8 sizeof(struct xfs_log_dinode) = 176 sizeof(struct xfs_log_legacy_timestamp) = 8 sizeof(struct xfs_map_extent) = 32 +sizeof(struct xfs_parent_name_rec) = 16 sizeof(struct xfs_phys_extent) = 16 sizeof(struct xfs_refcount_key) = 4 sizeof(struct xfs_refcount_rec) = 12 From patchwork Fri May 26 02:02:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256214 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2497C7EE29 for ; Fri, 26 May 2023 02:02:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233004AbjEZCC5 (ORCPT ); Thu, 25 May 2023 22:02:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229944AbjEZCCz (ORCPT ); Thu, 25 May 2023 22:02:55 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 915D5A3; Thu, 25 May 2023 19:02:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 170E464C49; Fri, 26 May 2023 02:02:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E744C433EF; Fri, 26 May 2023 02:02:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066573; bh=7PF2EEpRs6JgLEJTmsekk6am1aK5UgrLQ8er8AXE1TE=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=VXd6bJQiQuemmDi7HOTcQtg1nN/6XswRqxLUZNU2qmbyq2WyvtuoQa4syeOvnT12v EeoNzxAn0iwmzz0XI3FCpr7MYIuO1MGDxVFcYZPl9Y7wSzY80nD1P5dk6tO4rem7+0 ll89BYX9FuIBIlBtuo7D+hG3l+obsaAA726vc+xt4DD+SzS3Rl9S2l/ViLWuZR9u7d OBocZSwUQgyvmbRF/Iv1gqqsghaUXMLMYvD8Blv0G2Y2+V+ou2jvBt1ZDUou0LPyiM Jh2d+22eTwNcMc0jY3mU+Brz7NjkURpfIQnWlGn6P21m84b1cTXZc2LbWO0beKFkQh /6u59J9bSjosQ== Date: Thu, 25 May 2023 19:02:53 -0700 Subject: [PATCH 03/11] populate: create hardlinks for parent pointers From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060888.3732476.16059783773341686630.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong Create some hardlinked files so that we can exercise parent pointers. Signed-off-by: Darrick J. Wong --- common/populate | 38 ++++++++++++++++++++++++++++++++++++++ src/popdir.pl | 11 +++++++++++ 2 files changed, 49 insertions(+) diff --git a/common/populate b/common/populate index 3d233073c9..c75253ff14 100644 --- a/common/populate +++ b/common/populate @@ -450,6 +450,44 @@ _scratch_xfs_populate() { cp --reflink=always "${SCRATCH_MNT}/REFCOUNTBT" "${SCRATCH_MNT}/REFCOUNTBT2" fi + # Parent pointers + is_pptr="$(_xfs_has_feature "$SCRATCH_MNT" parent -v)" + if [ $is_pptr -gt 0 ]; then + echo "+ parent pointers" + + # Create a couple of parent pointers + __populate_create_dir "${SCRATCH_MNT}/PPTRS" 1 '' --hardlink --format "two_%d" + + # Create one xattr leaf block of parent pointers + nr="$((blksz * 2 / 16))" + __populate_create_dir "${SCRATCH_MNT}/PPTRS" ${nr} '' --hardlink --format "many%04d" + + # Create multiple xattr leaf blocks of large parent pointers + nr="$((blksz * 16 / 16))" + __populate_create_dir "${SCRATCH_MNT}/PPTRS" ${nr} '' --hardlink --format "y%0254d" + + # Create multiple paths to a file + local moof="${SCRATCH_MNT}/PPTRS/moofile" + touch "${moof}" + for ((i = 0; i < 4; i++)); do + mkdir -p "${SCRATCH_MNT}/PPTRS/SUB${i}" + ln "${moof}" "${SCRATCH_MNT}/PPTRS/SUB${i}/moofile" + done + + # Create parent pointers of various lengths + touch "${SCRATCH_MNT}/PPTRS/vlength" + local len_len + local tst + local fname + ln "${SCRATCH_MNT}/PPTRS/vlength" "${SCRATCH_MNT}/PPTRS/b" + for len in 32 64 96 128 160 192 224 250 255; do + len_len="${#len}" + tst="$(perl -e "print \"b\" x (${len} - (${len_len} + 1))")" + fname="v${tst}${len}" + ln "${SCRATCH_MNT}/PPTRS/vlength" "${SCRATCH_MNT}/PPTRS/${fname}" + done + fi + # Copy some real files (xfs tests, I guess...) echo "+ real files" test $fill -ne 0 && __populate_fill_fs "${SCRATCH_MNT}" 5 diff --git a/src/popdir.pl b/src/popdir.pl index e89095aafe..0104957a3c 100755 --- a/src/popdir.pl +++ b/src/popdir.pl @@ -17,6 +17,7 @@ GetOptions("start=i" => \$start, "dir=s" => \$dir, "remove!" => \$remove, "help!" => \$help, + "hardlink!" => \$hardlink, "verbose!" => \$verbose); @@ -35,6 +36,7 @@ Options: --format=str printf formatting string for file name ("%08d") --verbose verbose output --help this help screen + --hardlink hardlink subsequent files to the first one created EOF exit(1) unless defined $help; # otherwise... @@ -56,12 +58,21 @@ if ($file_pct < 0) { $file_pct = 100; } +if ($hardlink) { + $file_pct = 100; + $link_fname = sprintf($format, $start); +} + for ($i = $start; $i <= $end; $i += $incr) { $fname = sprintf($format, $i); if ($remove) { $verbose && print "rm $fname\n"; unlink($fname) or rmdir($fname) or die("unlink $fname"); + } elsif ($hardlink && $i > $start) { + # hardlink everything after the first file + $verbose && print "ln $link_fname $fname\n"; + link $link_fname, $fname; } elsif (($i % 100) < $file_pct) { # create a file $verbose && print "touch $fname\n"; From patchwork Fri May 26 02:03:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256215 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92BC5C77B7E for ; Fri, 26 May 2023 02:03:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233473AbjEZCDM (ORCPT ); Thu, 25 May 2023 22:03:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229944AbjEZCDL (ORCPT ); Thu, 25 May 2023 22:03:11 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25832A3; Thu, 25 May 2023 19:03:10 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id AEB8264C49; Fri, 26 May 2023 02:03:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0ECC8C433EF; Fri, 26 May 2023 02:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066589; bh=iBTUN6C4qY85bHbT/3vjlsDWxRD4mmofyEa6CRuqx4s=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=AZ9D+A1DqIYkrjJVVg3emc3p8gpCHD2waltvHH/KtMdyChQu4OJv8/NgB059yquKI zeZNiChF1qTmd6xnQdXuQj2d1znfpSy7BFAb1X7MQNI4rAQsWTyuIlxZoNRlSl7JBL blxMBFdnI1V31jhb+bH063Q8j8rvV7Fske/H7oK9TdDvFI3l3BEFT6VVwMooVtL+IU wC3wD9i3adUdZvrRofctrwKb0SbkQAWL+sbnipQTm0u0pQDHtAdkeDA4w+8/FvcoTm 9VtZWs0bgJ/3cQGPVolpRVGbZcAeSfInoL0ZiJr9axW1aLajMZgCvwKi4YPLDz3ndf xBQuR9OhancuQ== Date: Thu, 25 May 2023 19:03:08 -0700 Subject: [PATCH 04/11] xfs/021: adapt golden output files for parent pointers From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060902.3732476.14539386328776825876.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong Parent pointers change the xattr structure dramatically, so fix this test to handle them. For the most part we can get away with filtering out the parent pointer fields (which xfs_db decodes for us), but the namelen/valuelen/attr_filter fields still show through. Signed-off-by: Darrick J. Wong --- common/rc | 4 +++ tests/xfs/021 | 15 +++++++++-- tests/xfs/021.cfg | 1 + tests/xfs/021.out.default | 0 tests/xfs/021.out.parent | 62 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 tests/xfs/021.cfg rename tests/xfs/{021.out => 021.out.default} (100%) create mode 100644 tests/xfs/021.out.parent diff --git a/common/rc b/common/rc index 3e06c400b9..a86be288ac 100644 --- a/common/rc +++ b/common/rc @@ -3382,6 +3382,8 @@ _get_os_name() _link_out_file_named() { + test -n "$seqfull" || _fail "need to set seqfull" + local features=$2 local suffix=$(FEATURES="$features" perl -e ' my %feathash; @@ -3417,6 +3419,8 @@ _link_out_file() { local features + test -n "$seqfull" || _fail "need to set seqfull" + if [ $# -eq 0 ]; then features="$(_get_os_name),$FSTYP" if [ -n "$MOUNT_OPTIONS" ]; then diff --git a/tests/xfs/021 b/tests/xfs/021 index 9432e2acb0..ef307fc064 100755 --- a/tests/xfs/021 +++ b/tests/xfs/021 @@ -67,6 +67,13 @@ _scratch_mkfs_xfs >/dev/null \ echo "*** mount FS" _scratch_mount +seqfull=$0 +if _xfs_has_feature $SCRATCH_MNT parent; then + _link_out_file "parent" +else + _link_out_file "" +fi + testfile=$SCRATCH_MNT/testfile echo "*** make test file 1" @@ -108,7 +115,10 @@ _scratch_unmount >>$seqres.full 2>&1 \ echo "*** dump attributes (1)" _scratch_xfs_db -r -c "inode $inum_1" -c "print a.sfattr" | \ - sed -e '/secure = /d' | sed -e '/parent = /d' + perl -ne ' +/\.secure/ && next; +/\.parent/ && next; + print unless /^\d+:\[.*/;' echo "*** dump attributes (2)" @@ -124,10 +134,11 @@ s/info.hdr/info/; /hdr.info.uuid/ && next; /hdr.info.lsn/ && next; /hdr.info.owner/ && next; +/\.parent/ && next; s/^(hdr.info.magic =) 0x3bee/\1 0xfbee/; s/^(hdr.firstused =) (\d+)/\1 FIRSTUSED/; s/^(hdr.freemap\[0-2] = \[base,size]).*/\1 [FREEMAP..]/; -s/^(entries\[0-2] = \[hashval,nameidx,incomplete,root,local]).*/\1 [ENTRIES..]/; +s/^(entries\[0-[23]] = \[hashval,nameidx,incomplete,root,local]).*/\1 [ENTRIES..]/; print unless /^\d+:\[.*/;' echo "*** done" diff --git a/tests/xfs/021.cfg b/tests/xfs/021.cfg new file mode 100644 index 0000000000..73b127260c --- /dev/null +++ b/tests/xfs/021.cfg @@ -0,0 +1 @@ +parent: parent diff --git a/tests/xfs/021.out b/tests/xfs/021.out.default similarity index 100% rename from tests/xfs/021.out rename to tests/xfs/021.out.default diff --git a/tests/xfs/021.out.parent b/tests/xfs/021.out.parent new file mode 100644 index 0000000000..1af1301061 --- /dev/null +++ b/tests/xfs/021.out.parent @@ -0,0 +1,62 @@ +QA output created by 021 +*** mkfs +*** mount FS +*** make test file 1 +# file: .1 +user.a1 +user.a2-- + +*** make test file 2 +1+0 records in +1+0 records out +# file: .2 +user.a1 +user.a2----- +user.a3 + +Attribute "a3" had a 65535 byte value for .2: +size of attr value = 65536 + +*** unmount FS +*** dump attributes (1) +a.sfattr.hdr.totsize = 53 +a.sfattr.hdr.count = 3 +a.sfattr.list[0].namelen = 16 +a.sfattr.list[0].valuelen = 10 +a.sfattr.list[0].root = 0 +a.sfattr.list[1].namelen = 2 +a.sfattr.list[1].valuelen = 3 +a.sfattr.list[1].root = 0 +a.sfattr.list[1].name = "a1" +a.sfattr.list[1].value = "v1\d" +a.sfattr.list[2].namelen = 4 +a.sfattr.list[2].valuelen = 5 +a.sfattr.list[2].root = 0 +a.sfattr.list[2].name = "a2--" +a.sfattr.list[2].value = "v2--\d" +*** dump attributes (2) +hdr.info.forw = 0 +hdr.info.back = 0 +hdr.info.magic = 0xfbee +hdr.count = 4 +hdr.usedbytes = 84 +hdr.firstused = FIRSTUSED +hdr.holes = 0 +hdr.freemap[0-2] = [base,size] [FREEMAP..] +entries[0-3] = [hashval,nameidx,incomplete,root,local] [ENTRIES..] +nvlist[0].valuelen = 8 +nvlist[0].namelen = 2 +nvlist[0].name = "a1" +nvlist[0].value = "value_1\d" +nvlist[1].valueblk = 0x1 +nvlist[1].valuelen = 65535 +nvlist[1].namelen = 2 +nvlist[1].name = "a3" +nvlist[2].valuelen = 10 +nvlist[2].namelen = 16 +nvlist[3].valuelen = 8 +nvlist[3].namelen = 7 +nvlist[3].name = "a2-----" +nvlist[3].value = "value_2\d" +*** done +*** unmount From patchwork Fri May 26 02:03:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256216 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5BBDAC77B7E for ; Fri, 26 May 2023 02:03:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230099AbjEZCD2 (ORCPT ); Thu, 25 May 2023 22:03:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44868 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232547AbjEZCD1 (ORCPT ); Thu, 25 May 2023 22:03:27 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6231194; Thu, 25 May 2023 19:03:25 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 3A776619B3; Fri, 26 May 2023 02:03:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9BA76C433EF; Fri, 26 May 2023 02:03:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066604; bh=hqym1WiZgs1BU230iPp2vfb3KuQ5wXeQQCRy6rkSTp0=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=e2+KMeyrwui4sGFzIaPzsQYVfPT/npKJfcEoeIGbhlrr1+ueDoXZ21kRBSaA1k+Z9 41r6MrYAzw4VWhf3Ij/yHxQ4hEZloVbzp0IkXkDp+UkVg16euMgnCvnz9ra33nLIaO 1tnmbHzIFVF+0930UviPb5fPyb1dfeSnY5xHwmg6sJpx4jkD6INzukcycaocT1fp/R Vi5D8ACafkClEQLokd7LNLk4sJ1QzI3IEg9yr8RWxEi+dUJ70U1GC/UWO1VmW2k56f ikgUswSX03i9fP3Rq3LyW/3pId6w7FML6lhVFWF00Ek4J4MG5Ub4i4pw7klB0xq5Ja X65cC3YbsXyFA== Date: Thu, 25 May 2023 19:03:24 -0700 Subject: [PATCH 05/11] generic/050: adapt for parent pointers From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060915.3732476.5106446538351117289.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong Fix this test when quotas and parent pointers are enabled. Signed-off-by: Darrick J. Wong --- tests/generic/050 | 20 ++++++++++++++++++-- tests/generic/050.cfg | 1 + tests/generic/050.out.xfsquotaparent | 23 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 tests/generic/050.out.xfsquotaparent diff --git a/tests/generic/050 b/tests/generic/050 index 0664f8c0e4..0edeeee10a 100755 --- a/tests/generic/050 +++ b/tests/generic/050 @@ -33,9 +33,25 @@ features="" if ! _has_metadata_journaling $SCRATCH_DEV >/dev/null; then features="nojournal" elif [ "$FSTYP" = "xfs" ] && echo "$MOUNT_OPTIONS" | grep -q quota ; then - # Mounting with quota on XFS requires a writable fs, which means - # we expect to fail the ro blockdev test with with EPERM. + # *Trying* to mount with quota on XFS requires a writable fs, which + # means we expect to fail the ro blockdev test with with EPERM. It + # doesn't matter if xfs_mount would ultimately decide that quota is not + # supported. features="xfsquota" + + if _xfs_has_feature $SCRATCH_DEV parent && \ + ! _xfs_has_feature $SCRATCH_DEV realtime; then + # If we have quotas and parent pointers enabled, the primary + # superblock will be written out with the quota flags set when + # the logged xattrs log_incompat feature is set. Hence the + # ro-norecovery mount won't fail with EPERM because the ondisk + # super's qflags actually match the mount qflags. + # + # Quota is not supported with realtime; in that case, the + # ondisk super's qflags will be zero and hence not match the + # mount qflags. Select 'xfsquota' in that case. + features="xfsquotaparent" + fi fi _link_out_file "$features" diff --git a/tests/generic/050.cfg b/tests/generic/050.cfg index 1d9d60bc69..85924d117d 100644 --- a/tests/generic/050.cfg +++ b/tests/generic/050.cfg @@ -1,2 +1,3 @@ nojournal: nojournal xfsquota: xfsquota +xfsquotaparent: xfsquotaparent diff --git a/tests/generic/050.out.xfsquotaparent b/tests/generic/050.out.xfsquotaparent new file mode 100644 index 0000000000..b341aca5be --- /dev/null +++ b/tests/generic/050.out.xfsquotaparent @@ -0,0 +1,23 @@ +QA output created by 050 +setting device read-only +mounting read-only block device: +mount: SCRATCH_MNT: permission denied +unmounting read-only filesystem +umount: SCRATCH_DEV: not mounted +setting device read-write +mounting read-write block device: +touch files +going down: +unmounting shutdown filesystem: +setting device read-only +mounting filesystem that needs recovery on a read-only device: +mount: device write-protected, mounting read-only +mount: cannot mount device read-only +unmounting read-only filesystem +umount: SCRATCH_DEV: not mounted +mounting filesystem with -o norecovery on a read-only device: +mount: device write-protected, mounting read-only +unmounting read-only filesystem +setting device read-write +mounting filesystem that needs recovery with -o ro: +*** done From patchwork Fri May 26 02:03:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256217 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A91D8C7EE29 for ; Fri, 26 May 2023 02:03:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234890AbjEZCDt (ORCPT ); Thu, 25 May 2023 22:03:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240106AbjEZCDr (ORCPT ); Thu, 25 May 2023 22:03:47 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F5F819A; Thu, 25 May 2023 19:03:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C2FB264C45; Fri, 26 May 2023 02:03:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B112C433EF; Fri, 26 May 2023 02:03:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066620; bh=jcMPAitEdlmtQO6luu6/YtNbQLTOBOSD+2V5MPg8xLk=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=eET+BdbldELCUg2zvBePzwcLfo27HUtfoqwB+Mj1uNhRbrIjX+pvvQxMpqebYpYxD fOKAEL34UDdz7TA9u0RcFw7dfCV+CY9PCQEBPSpkXNLApM/QN6AkRRVhCUSfHCBv6D UuvUXe1Q80N99cP8QM1FE6yn6KayuKQlIZfiWao6leGwIBKZ2QnfazhQL27BCTHOId P+42VAxEsLB5ByPtasxQPfEsfLVYzDqWWkAG7uCADu5jtNzwqj2+AUCHe8p8xxJ86j r4M8wX1a+4EgWOC7oH1V/L29VSUQcLX/ACYFGkC9iHhcaJBHlg1JgLEroZ+7pio8Ax AQQ04Qy8DFOYA== Date: Thu, 25 May 2023 19:03:39 -0700 Subject: [PATCH 06/11] xfs/018: disable parent pointers for this test From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060929.3732476.6482579916222371853.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong This test depends heavily on the xattr formats created for new files. Parent pointers break those assumptions, so force parent pointers off. Signed-off-by: Darrick J. Wong --- tests/xfs/018 | 7 ++++++- tests/xfs/191 | 7 ++++++- tests/xfs/288 | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tests/xfs/018 b/tests/xfs/018 index 1ef51a2e61..34b6e91579 100755 --- a/tests/xfs/018 +++ b/tests/xfs/018 @@ -100,7 +100,12 @@ attr32l="X$attr32k" attr64k="$attr32k$attr32k" echo "*** mkfs" -_scratch_mkfs >/dev/null + +# Parent pointers change the xattr formats sufficiently to break this test. +# Disable parent pointers if mkfs supports it. +mkfs_args=() +$MKFS_XFS_PROG 2>&1 | grep -q parent=0 && mkfs_args+=(-n parent=0) +_scratch_mkfs "${mkfs_args[@]}" >/dev/null blk_sz=$(_scratch_xfs_get_sb_field blocksize) err_inj_attr_sz=$(( blk_sz / 3 - 50 )) diff --git a/tests/xfs/191 b/tests/xfs/191 index 7a02f1be21..0a6c20dad7 100755 --- a/tests/xfs/191 +++ b/tests/xfs/191 @@ -33,7 +33,12 @@ _fixed_by_kernel_commit 7be3bd8856fb "xfs: empty xattr leaf header blocks are no _fixed_by_kernel_commit e87021a2bc10 "xfs: use larger in-core attr firstused field and detect overflow" _fixed_by_git_commit xfsprogs f50d3462c654 "xfs_repair: ignore empty xattr leaf blocks" -_scratch_mkfs_xfs | _filter_mkfs >$seqres.full 2>$tmp.mkfs +# Parent pointers change the xattr formats sufficiently to break this test. +# Disable parent pointers if mkfs supports it. +mkfs_args=() +$MKFS_XFS_PROG 2>&1 | grep -q parent=0 && mkfs_args+=(-n parent=0) + +_scratch_mkfs_xfs "${mkfs_args[@]}" | _filter_mkfs >$seqres.full 2>$tmp.mkfs cat $tmp.mkfs >> $seqres.full source $tmp.mkfs _scratch_mount diff --git a/tests/xfs/288 b/tests/xfs/288 index aa664a266e..6bfc9ac0c8 100755 --- a/tests/xfs/288 +++ b/tests/xfs/288 @@ -19,8 +19,13 @@ _supported_fs xfs _require_scratch _require_attrs +# Parent pointers change the xattr formats sufficiently to break this test. +# Disable parent pointers if mkfs supports it. +mkfs_args=() +$MKFS_XFS_PROG 2>&1 | grep -q parent=0 && mkfs_args+=(-n parent=0) + # get block size ($dbsize) from the mkfs output -_scratch_mkfs_xfs 2>/dev/null | _filter_mkfs 2>$tmp.mkfs >/dev/null +_scratch_mkfs_xfs "${mkfs_args[@]}" 2>/dev/null | _filter_mkfs 2>$tmp.mkfs >/dev/null . $tmp.mkfs _scratch_mount From patchwork Fri May 26 02:03:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256218 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FCF5C77B7E for ; Fri, 26 May 2023 02:03:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231691AbjEZCD6 (ORCPT ); Thu, 25 May 2023 22:03:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45194 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229944AbjEZCD5 (ORCPT ); Thu, 25 May 2023 22:03:57 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1D7FE7; Thu, 25 May 2023 19:03:56 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 5E97C619B3; Fri, 26 May 2023 02:03:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6CE9C433EF; Fri, 26 May 2023 02:03:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066635; bh=5ojAQWLRuwMuldWRkPKiK/uQHSX78DhaKxe/Ap7vFKw=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=d0Ult23ESK/Y9gVoqqHF2egoMjlmiVcxTJlPzFu6hsEQRlBL4OWhJE8I5Q44pEGHa pXXvvwb4+8t1f7O8jloHrc6gXVwo08jx4dKBieOVUABs14ov6C54hZqB7GojJGikt0 A7WGY28uhFZG+z20VRdz/5sgkhkqs4nlB2CRAi1RvmLKlAQRm8sXVI4LkN3dR+dyRx YNEly8ke0vBNMHNSAaFZGDp3x6um66MSecCtmly/NrgXVVpPyeWWIGz6wUvyWagVe2 Z0XNsB2jN7wVSje/UBMQ8IMCn45Pzf0yHLrYtVeqjofewvUQEFV8P77I179sWcdqbJ 6y75n1xlLkEMA== Date: Thu, 25 May 2023 19:03:55 -0700 Subject: [PATCH 07/11] xfs/306: fix formatting failures with parent pointers From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060942.3732476.692396921947580410.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Darrick J. Wong The parent pointers feature isn't supported on tiny 20MB filesystems because the larger directory transactions result in larger minimum log sizes, particularly with nrext64 enabled: ** mkfs failed with extra mkfs options added to " -m rmapbt=0, -i nrext64=1, -n parent=1," by test 306 ** ** attempting to mkfs using only test 306 options: -d size=20m -n size=64k ** max log size 5108 smaller than min log size 5310, filesystem is too small We don't support 20M filesystems anymore, so bump the filesystem size up to 100M and skip this test if we can't actually format the filesystem. Convert the open-coded punch-alternating logic into a call to that program to reduce execve overhead, which more than makes up having to write 5x as much data to fragment the free space. Signed-off-by: Darrick J. Wong --- tests/xfs/306 | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/xfs/306 b/tests/xfs/306 index b57bf4c0a9..152971cfc3 100755 --- a/tests/xfs/306 +++ b/tests/xfs/306 @@ -23,6 +23,7 @@ _supported_fs xfs _require_scratch_nocheck # check complains about single AG fs _require_xfs_io_command "fpunch" _require_command $UUIDGEN_PROG uuidgen +_require_test_program "punch-alternating" # Disable the scratch rt device to avoid test failures relating to the rt # bitmap consuming all the free space in our small data device. @@ -30,7 +31,8 @@ unset SCRATCH_RTDEV # Create a small fs with a large directory block size. We want to fill up the fs # quickly and then create multi-fsb dirblocks over fragmented free space. -_scratch_mkfs_xfs -d size=20m -n size=64k >> $seqres.full 2>&1 +_scratch_mkfs_xfs -d size=100m -n size=64k >> $seqres.full 2>&1 || \ + _notrun 'could not format tiny scratch fs' _scratch_mount # Fill a source directory with many largish-named files. 1k uuid-named entries @@ -49,10 +51,7 @@ done $XFS_IO_PROG -xc "resblks 16" $SCRATCH_MNT >> $seqres.full 2>&1 dd if=/dev/zero of=$SCRATCH_MNT/file bs=4k >> $seqres.full 2>&1 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/file >> $seqres.full 2>&1 -size=`_get_filesize $SCRATCH_MNT/file` -for i in $(seq 0 8192 $size); do - $XFS_IO_PROG -c "fpunch $i 4k" $SCRATCH_MNT/file >> $seqres.full 2>&1 -done +$here/src/punch-alternating $SCRATCH_MNT/file # Replicate the src dir several times into fragmented free space. After one or # two dirs, we should have nothing but non-contiguous directory blocks. From patchwork Fri May 26 02:04:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256219 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D74BFC7EE29 for ; Fri, 26 May 2023 02:04:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231712AbjEZCEO (ORCPT ); Thu, 25 May 2023 22:04:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229727AbjEZCEN (ORCPT ); Thu, 25 May 2023 22:04:13 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77A72E7; Thu, 25 May 2023 19:04:12 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id F09C764C47; Fri, 26 May 2023 02:04:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 57F1CC433EF; Fri, 26 May 2023 02:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066651; bh=ZACPTB5uHXBkzxw2G2YG0fVh7/H4sYNiE5FWwIPt+RI=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=rEOBDsWpXujx05sU5QyBXT8Bd1YauJXSOLzEQhf4VDh2X1BKL0xRChHXCgOK/m8d/ gJg1KVm1KBGP5R+MhdMk8xqPyhwoKURexq44c3rZtD+dQ91Xe8pMPR+E5ss2uxtTAZ 0dsGJixGkmO38Ugxexo51rh+0IINMaOMkdQsHo5Jv6u8xFAYqK69yVaJs6uIopuixK K5i/+RDfJy9NF7niK0gMDenrgMfjoA4uPhIzaGL5chBQovdrwZ2zzC5TgCsDGFQ2qM b7WEJxX7XCUmEoi1bp0SiDkRtoGXfAcewlCzJCh7/ykTJ7YERHp4BadRKaLHiIgUtJ AanMUgxtM6exQ== Date: Thu, 25 May 2023 19:04:10 -0700 Subject: [PATCH 08/11] common: add helpers for parent pointer tests From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: Allison Henderson , Catherine Hoang , linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060956.3732476.13683315824625392534.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Allison Henderson 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 Signed-off-by: Catherine Hoang Reviewed-by: Darrick J. Wong [djwong: add license and copyright, dont _fail tests immediately, make sure the pptr-generated paths match the dir-generated paths] Signed-off-by: Darrick J. Wong --- common/parent | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/rc | 3 + common/xfs | 12 +++ 3 files changed, 224 insertions(+) create mode 100644 common/parent diff --git a/common/parent b/common/parent new file mode 100644 index 0000000000..f849e4b27c --- /dev/null +++ b/common/parent @@ -0,0 +1,209 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022-2023, Oracle and/or its affiliates. All Rights Reserved. +# +# 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 + echo "$SCRATCH_MNT/$parent_path not found" + else + echo "*** $parent_path OK" + fi + + # Verify child exists + if [ ! -f $SCRATCH_MNT/$child_path ]; then + echo "$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 + echo "$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 + echo "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 + echo "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 + echo "Bad parent pointer name value for $child_path."\ + "$SCRATCH_MNT/$parent_ppath belongs to inode $PPPINO,"\ + "but should be $cino" + fi + + # Make sure path printing works by checking that the paths returned + # all point to the same inode. + local tgt="$SCRATCH_MNT/$child_path" + $XFS_IO_PROG -x -c 'parent -p' "$tgt" | while read pptr_path; do + test "$tgt" -ef "$pptr_path" || \ + echo "$tgt parent pointer $pptr_path should be the same file" + done + + 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 + echo "$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 + + echo "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 a86be288ac..0f9aeceea6 100644 --- a/common/rc +++ b/common/rc @@ -2634,6 +2634,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 f48d7306a5..c39bf392dc 100644 --- a/common/xfs +++ b/common/xfs @@ -1816,3 +1816,15 @@ _xfs_discard_max_offset_kb() $XFS_IO_PROG -c 'statfs' "$1" | \ awk '{g[$1] = $3} END {print (g["geom.bsize"] * g["geom.datablocks"] / 1024)}' } + +# 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 +} From patchwork Fri May 26 02:04:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256220 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB5A1C7EE2E for ; Fri, 26 May 2023 02:04:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229727AbjEZCEa (ORCPT ); Thu, 25 May 2023 22:04:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232547AbjEZCE3 (ORCPT ); Thu, 25 May 2023 22:04:29 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 136CEE7; Thu, 25 May 2023 19:04:28 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 981A06179C; Fri, 26 May 2023 02:04:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F22FFC433D2; Fri, 26 May 2023 02:04:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066667; bh=jiJvecMK8tTjFtYL2YrG6TYyXvGje752Lwl6SITfG7U=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=EV3w8iy2/YGpl1/LbgoHDJ4Iht58qhUjcBqQwpDU5UEgUOaRSZHvXW8w7Au1aW9/A 0PDqwKPv+xUSBIKWDy6BgPPZEVd+sRoY/3LYCMmkovxrqO5mS9DTv1TX/gDIFMUAiG m9B743L2TsgXD+rZVgly44VK8+cQJ5MMK7JgAh9a/HkS5WuMJnv4+XBD+mKHHM0vKW Xbiswop2OcH4cf/kJZHLK38ElzLYmulQvBJsDKCeP9305MGIeZDL+8pKOy4X6Deq3M faystYVDy3b2519DFdz5kSIEyAIb/X+kjQHpwvGvYDLnEeir9qDrD1fMH3UM3yhvZZ DA5o5bpnY90Eg== Date: Thu, 25 May 2023 19:04:26 -0700 Subject: [PATCH 09/11] xfs: add parent pointer test From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: Allison Henderson , Catherine Hoang , linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060969.3732476.3487745479008755924.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Allison Henderson Add a test to verify basic parent pointers operations (create, move, link, unlink, rename, overwrite). Signed-off-by: Allison Henderson Signed-off-by: Catherine Hoang Reviewed-by: Darrick J. Wong [djwong: test the xfs_io parent -p argument too] Signed-off-by: Darrick J. Wong --- doc/group-names.txt | 1 tests/xfs/851 | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/851.out | 69 ++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100755 tests/xfs/851 create mode 100644 tests/xfs/851.out diff --git a/doc/group-names.txt b/doc/group-names.txt index 545ef59d66..dcd6083a45 100644 --- a/doc/group-names.txt +++ b/doc/group-names.txt @@ -83,6 +83,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/851 b/tests/xfs/851 new file mode 100755 index 0000000000..8233c1563c --- /dev/null +++ b/tests/xfs/851 @@ -0,0 +1,116 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022, Oracle and/or its affiliates. All Rights Reserved. +# +# FS QA Test 851 +# +# simple parent pointer test +# + +. ./common/preamble +_begin_fstest auto quick parent + +# get standard environment, filters and checks +. ./common/parent +. ./common/filter + +# 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 <>$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" + +# Make sure that parent -p filtering works +mkdir -p $SCRATCH_MNT/dira/ $SCRATCH_MNT/dirb/ +dira_inum=$(stat -c '%i' $SCRATCH_MNT/dira) +dirb_inum=$(stat -c '%i' $SCRATCH_MNT/dirb) +touch $SCRATCH_MNT/gorn +ln $SCRATCH_MNT/gorn $SCRATCH_MNT/dira/file1 +ln $SCRATCH_MNT/gorn $SCRATCH_MNT/dirb/file1 +echo look for both +$XFS_IO_PROG -c 'parent -p' $SCRATCH_MNT/gorn | _filter_scratch +echo look for dira +$XFS_IO_PROG -c 'parent -p -n dira' -c "parent -p -i $dira_inum" $SCRATCH_MNT/gorn | _filter_scratch +echo look for dirb +$XFS_IO_PROG -c 'parent -p -n dirb' -c "parent -p -i $dirb_inum" $SCRATCH_MNT/gorn | _filter_scratch + +# success, all done +status=0 +exit diff --git a/tests/xfs/851.out b/tests/xfs/851.out new file mode 100644 index 0000000000..f44d3e5d4f --- /dev/null +++ b/tests/xfs/851.out @@ -0,0 +1,69 @@ +QA output created by 851 + +*** 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 +look for both +SCRATCH_MNT/gorn +SCRATCH_MNT/dira/file1 +SCRATCH_MNT/dirb/file1 +look for dira +SCRATCH_MNT/dira/file1 +SCRATCH_MNT/dira/file1 +look for dirb +SCRATCH_MNT/dirb/file1 +SCRATCH_MNT/dirb/file1 From patchwork Fri May 26 02:04:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256221 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E68CBC7EE2E for ; Fri, 26 May 2023 02:04:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232547AbjEZCEy (ORCPT ); Thu, 25 May 2023 22:04:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241041AbjEZCEr (ORCPT ); Thu, 25 May 2023 22:04:47 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCD78A3; Thu, 25 May 2023 19:04:43 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 3ADFB619B3; Fri, 26 May 2023 02:04:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90A2FC433EF; Fri, 26 May 2023 02:04:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066682; bh=XkiwkjioI8Z9mjvJAdu7H5xoqp7IRN29tHkZxOE58vI=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=VWmhExoNVhgJv7KmVqzJsslD4Bjc42GsDJsTuJvbAdPDTtt+cJ+AnNJGmIyKeFWQ6 4XyluqbFF9KmFuxTZE5Wpgdpjku/CZsPSduL+hpQCVfsX04agj+N1Phv6NX8yKma2q aLpJt7uullTm1bGVyl0ipl+sBd5PywKA6xLX66UCN4O1KtH/g/zZSEM/nU+nUgOb8p EZ2/QBjcYUPh87xUGSV+O96+o362TeAXaVsHJg/a/qHmrohW/+sp6JqR9bLsc2Kuoq cjM3fos7mdx+VIuNrFlxHQCF39so8+1XWnmanavjcT5FUZJPYnpJWAiLlEMPmH1G19 n6GUE0Jvg2VBA== Date: Thu, 25 May 2023 19:04:42 -0700 Subject: [PATCH 10/11] xfs: add multi link parent pointer test From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: Allison Henderson , Catherine Hoang , linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060983.3732476.14999094192356689144.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Allison Henderson Add a test to verify parent pointers while multiple links to a file are created and removed. Signed-off-by: Allison Henderson Signed-off-by: Catherine Hoang Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- tests/xfs/852 | 69 ++++ tests/xfs/852.out | 1002 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1071 insertions(+) create mode 100755 tests/xfs/852 create mode 100644 tests/xfs/852.out diff --git a/tests/xfs/852 b/tests/xfs/852 new file mode 100755 index 0000000000..4d1be0e945 --- /dev/null +++ b/tests/xfs/852 @@ -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 852 +# +# 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 <>$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/852.out b/tests/xfs/852.out new file mode 100644 index 0000000000..9cc4b354ad --- /dev/null +++ b/tests/xfs/852.out @@ -0,0 +1,1002 @@ +QA output created by 852 + +*** 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 From patchwork Fri May 26 02:04:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13256222 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AD93C7EE29 for ; Fri, 26 May 2023 02:05:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241917AbjEZCFB (ORCPT ); Thu, 25 May 2023 22:05:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241041AbjEZCFA (ORCPT ); Thu, 25 May 2023 22:05:00 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E418A3; Thu, 25 May 2023 19:04:59 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C862364C4C; Fri, 26 May 2023 02:04:58 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34C04C433EF; Fri, 26 May 2023 02:04:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685066698; bh=sUnxusCjM7KbBV1sOapwU/pO0WMHXTiwdOMaQy9glDE=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=gHAZjFjqIU9n03AaaFsfOnx3uSAEckLd384p22BVZHB36vLWj043k9ztO5Zy+Zo2P IiCKDePC9oWY70XR91w9g/zTbbZJ2pA3mQuX2jN0nS5p2eMTOTeAFarQHY/39KTPmb dlvnLnYH4Zrc3b8T6yy0vPi+sVx20WWIShWSJH0eClUiDz1MqXPZ4uw1Xy7rwcQFNt PgvMekjHAa536lpHB9cVnep3c/JQix1gXnDR9WUzndQnhVNjfXCGe/yEjzh7j3O2ha 5vXm8vdq0JL9khh+2pGfx7eYLHT3uuIKC5QYaMnNlrN26HqkJp3UzL/SOXvR58DXKA 1wNtZyIgExVYg== Date: Thu, 25 May 2023 19:04:57 -0700 Subject: [PATCH 11/11] xfs: add parent pointer inject test From: "Darrick J. Wong" To: zlang@redhat.com, djwong@kernel.org Cc: Allison Henderson , Catherine Hoang , linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me, allison.henderson@oracle.com, catherine.hoang@oracle.com Message-ID: <168506060996.3732476.15225791466368855642.stgit@frogsfrogsfrogs> In-Reply-To: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> References: <168506060845.3732476.15364197106064737675.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org From: Allison Henderson Add a test to verify parent pointers after an error injection and log replay. Signed-off-by: Allison Henderson Signed-off-by: Catherine Hoang Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- tests/xfs/853 | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/853.out | 14 +++++++++ 2 files changed, 99 insertions(+) create mode 100755 tests/xfs/853 create mode 100644 tests/xfs/853.out diff --git a/tests/xfs/853 b/tests/xfs/853 new file mode 100755 index 0000000000..f17f4b7e9e --- /dev/null +++ b/tests/xfs/853 @@ -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 853 +# +# 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 <>$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/853.out b/tests/xfs/853.out new file mode 100644 index 0000000000..56247c1434 --- /dev/null +++ b/tests/xfs/853.out @@ -0,0 +1,14 @@ +QA output created by 853 + +*** 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