From: "Darrick J. Wong" <djwong@kernel.org>
To: zlang@redhat.com, djwong@kernel.org
Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me
Subject: [PATCH 02/14] populate: create hardlinks for parent pointers
Date: Thu, 16 Mar 2023 12:33:26 -0700 [thread overview]
Message-ID: <167899417681.17926.9773642875554425949.stgit@frogsfrogsfrogs> (raw)
In-Reply-To: <167899417650.17926.7405859750613330339.stgit@frogsfrogsfrogs>
From: Darrick J. Wong <djwong@kernel.org>
Create some hardlinked files so that we can exercise parent pointers.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/populate | 38 ++++++++++++++++++++++++++++++++++++++
src/popdir.pl | 11 +++++++++++
2 files changed, 49 insertions(+)
diff --git a/common/populate b/common/populate
index 389a762329..d52167964c 100644
--- a/common/populate
+++ b/common/populate
@@ -376,6 +376,7 @@ _scratch_xfs_populate() {
is_rt="$(_xfs_get_rtextents "$SCRATCH_MNT")"
is_rmapbt="$(_xfs_has_feature "$SCRATCH_MNT" rmapbt -v)"
is_reflink="$(_xfs_has_feature "$SCRATCH_MNT" reflink -v)"
+ is_pptr="$(_xfs_has_feature "$SCRATCH_MNT" parent -v)"
# Reverse-mapping btree
if [ $is_rmapbt -gt 0 ]; then
@@ -412,6 +413,43 @@ _scratch_xfs_populate() {
cp --reflink=always "${SCRATCH_MNT}/REFCOUNTBT" "${SCRATCH_MNT}/REFCOUNTBT2"
fi
+ # Parent pointers
+ 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 dc0c046b7d..950503c621 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);
@@ -36,6 +37,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...
@@ -51,12 +53,21 @@ $file_mult = 20 if (!defined $file_mult);
$format = "%08d" if (!defined $format);
$incr = 1 if (!defined $incr);
+if ($hardlink) {
+ $file_mult = 0;
+ $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 the first file
+ $verbose && print "ln $link_fname $fname\n";
+ link $link_fname, $fname;
} elsif ($file_mult == 0 or ($i % $file_mult) == 0) {
# create a file
$verbose && print "touch $fname\n";
next prev parent reply other threads:[~2023-03-16 19:33 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-16 18:54 [RFC DELUGE v10r1d2] xfs: Parent Pointers Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 0/7] xfs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:19 ` [PATCH 1/7] xfs: validate parent pointer xattrs in getparent Darrick J. Wong
2023-03-16 19:20 ` [PATCH 2/7] xfs: rename xfs_pptr_info to xfs_getparents Darrick J. Wong
2023-03-16 19:20 ` [PATCH 3/7] xfs: rename xfs_parent_ptr Darrick J. Wong
2023-03-16 19:20 ` [PATCH 4/7] xfs: fix GETPARENTS ioctl Darrick J. Wong
2023-03-16 19:20 ` [PATCH 5/7] xfs: add tracing to the " Darrick J. Wong
2023-03-16 19:21 ` [PATCH 6/7] xfs: shorten parent pointer function names Darrick J. Wong
2023-03-16 19:21 ` [PATCH 7/7] xfs: rearrange bits of the parent pointer apis for fsck Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 00/17] xfs: encode parent pointer name in xattr key Darrick J. Wong
2023-03-16 19:21 ` [PATCH 01/17] xfs: document the ri_total validation in xlog_recover_attri_commit_pass2 Darrick J. Wong
2023-03-16 19:22 ` [PATCH 02/17] xfs: make xfs_attr_set require XFS_DA_OP_REMOVE Darrick J. Wong
2023-03-16 19:22 ` [PATCH 03/17] xfs: allow xattr matching on value for local/sf attrs Darrick J. Wong
2023-03-16 19:22 ` [PATCH 04/17] xfs: preserve VLOOKUP in xfs_attr_set Darrick J. Wong
2023-03-16 19:22 ` [PATCH 05/17] xfs: restructure xfs_attr_complete_op a bit Darrick J. Wong
2023-03-16 19:23 ` [PATCH 06/17] xfs: use helpers to extract xattr op from opflags Darrick J. Wong
2023-03-16 19:23 ` [PATCH 07/17] xfs: validate recovered name buffers when recovering xattr items Darrick J. Wong
2023-03-16 19:23 ` [PATCH 08/17] xfs: always set args->value in xfs_attri_item_recover Darrick J. Wong
2023-03-16 19:23 ` [PATCH 09/17] xfs: flip nvreplace detection in xfs_attr_complete_op Darrick J. Wong
2023-03-16 19:24 ` [PATCH 10/17] xfs: log VLOOKUP xattr removal operations Darrick J. Wong
2023-03-16 19:24 ` [PATCH 11/17] xfs: log VLOOKUP xattr setting operations Darrick J. Wong
2023-03-16 19:24 ` [PATCH 12/17] xfs: overlay alfi_nname_len atop alfi_name_len for NVREPLACE Darrick J. Wong
2023-03-16 19:24 ` [PATCH 13/17] xfs: refactor value length in xlog_recover_attri_commit_pass2 Darrick J. Wong
2023-03-16 19:25 ` [PATCH 14/17] xfs: rename nname to newname Darrick J. Wong
2023-03-16 19:25 ` [PATCH 15/17] xfs: log VLOOKUP xattr nvreplace operations Darrick J. Wong
2023-03-16 19:25 ` [PATCH 16/17] xfs: log new xattr values for NVREPLACEXXX operations Darrick J. Wong
2023-03-16 19:25 ` [PATCH 17/17] xfs: replace parent pointer diroffset with full dirent name Darrick J. Wong
2023-03-24 17:10 ` [PATCHSET v10r1d2 00/17] xfs: encode parent pointer name in xattr key Allison Henderson
2023-03-25 7:59 ` Amir Goldstein
2023-03-25 17:01 ` Darrick J. Wong
2023-03-26 3:21 ` Amir Goldstein
2023-03-28 1:29 ` Darrick J. Wong
2023-03-28 7:21 ` Amir Goldstein
2023-03-28 22:29 ` Dave Chinner
2023-03-28 23:54 ` Darrick J. Wong
2023-03-29 0:19 ` Dave Chinner
2023-03-29 0:46 ` Darrick J. Wong
2023-03-30 1:56 ` Darrick J. Wong
2023-03-25 17:03 ` Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 0/9] xfsprogs: tool fixes for parent pointers Darrick J. Wong
2023-03-16 19:26 ` [PATCH 1/9] libxfs: initialize the slab cache for parent defer items Darrick J. Wong
2023-03-16 19:26 ` [PATCH 2/9] mkfs: fix libxfs api misuse Darrick J. Wong
2023-03-16 19:26 ` [PATCH 3/9] libxfs: create new files with attr forks if necessary Darrick J. Wong
2023-03-16 19:26 ` [PATCH 4/9] mkfs: fix subdir parent pointer creation Darrick J. Wong
2023-03-16 19:27 ` [PATCH 5/9] xfs_db: report parent pointer keys Darrick J. Wong
2023-03-16 19:27 ` [PATCH 6/9] xfs_db: obfuscate dirent and pptr names consistently Darrick J. Wong
2023-03-16 19:27 ` [PATCH 7/9] xfs_io: print path in path_print Darrick J. Wong
2023-03-16 19:27 ` [PATCH 8/9] xfs_io: parent command is not experts-only Darrick J. Wong
2023-03-16 19:28 ` [PATCH 9/9] xfs_repair: fix incorrect dabtree hashval comparison Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/2] xfsprogs: actually use getparent ioctl Darrick J. Wong
2023-03-16 19:28 ` [PATCH 1/2] xfs_scrub: revert unnecessary code from "implement the upper half of parent pointers" Darrick J. Wong
2023-03-16 19:28 ` [PATCH 2/2] xfs_scrub: use parent pointers when possible to report file operations Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/7] libfrog: fix parent pointer library code Darrick J. Wong
2023-03-16 19:29 ` [PATCH 1/7] xfs_io: move parent pointer filtering and formatting flags out of libhandle Darrick J. Wong
2023-03-16 19:29 ` [PATCH 2/7] libfrog: remove all the parent pointer code from libhandle Darrick J. Wong
2023-03-16 19:29 ` [PATCH 3/7] libfrog: fix indenting errors in xfss_pptr_alloc Darrick J. Wong
2023-03-16 19:29 ` [PATCH 4/7] libfrog: return positive errno in pptrs.c Darrick J. Wong
2023-03-16 19:30 ` [PATCH 5/7] libfrog: only walk one parent pointer at a time in handle_walk_parent_path_ptr Darrick J. Wong
2023-03-16 19:30 ` [PATCH 6/7] libfrog: trim trailing slashes when printing pptr paths Darrick J. Wong
2023-03-16 19:30 ` [PATCH 7/7] libfrog: fix a buffer overrun in path_list_to_string Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/5] xfsprogs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:30 ` [PATCH 1/5] xfs: rename xfs_pptr_info to xfs_getparents Darrick J. Wong
2023-03-16 19:31 ` [PATCH 2/5] xfs: rename xfs_parent_ptr Darrick J. Wong
2023-03-16 19:31 ` [PATCH 3/5] xfs: fix GETPARENTS ioctl Darrick J. Wong
2023-03-16 19:31 ` [PATCH 4/5] xfs: shorten parent pointer function names Darrick J. Wong
2023-03-16 19:31 ` [PATCH 5/5] xfs: rearrange bits of the parent pointer apis for fsck Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/4] xfs_logprint: clean up attri/pptr dumping Darrick J. Wong
2023-03-16 19:32 ` [PATCH 1/4] xfs: revert "xfsprogs: Print pptrs in ATTRI items" Darrick J. Wong
2023-03-16 19:32 ` [PATCH 2/4] xfs_logprint: print missing attri header fields Darrick J. Wong
2023-03-16 19:32 ` [PATCH 3/4] xfs: make logprint note attr names and newnames consistently Darrick J. Wong
2023-03-16 19:32 ` [PATCH 4/4] xfs_logprint: decode parent pointers fully Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 00/14] fstests: adjust tests for xfs parent pointers Darrick J. Wong
2023-03-16 19:33 ` [PATCH 01/14] xfs/122: update for " Darrick J. Wong
2023-03-16 19:33 ` Darrick J. Wong [this message]
2023-03-16 19:33 ` [PATCH 03/14] xfs/021: adapt golden output files " Darrick J. Wong
2023-03-16 19:33 ` [PATCH 04/14] generic/050: adapt " Darrick J. Wong
2023-03-16 19:34 ` [PATCH 05/14] xfs/018: disable parent pointers for this test Darrick J. Wong
2023-03-16 19:34 ` [PATCH 06/14] xfs/306: fix formatting failures with parent pointers Darrick J. Wong
2023-03-16 19:34 ` [PATCH 07/14] common: add helpers for parent pointer tests Darrick J. Wong
2023-03-16 19:35 ` [PATCH 08/14] xfs: add parent pointer test Darrick J. Wong
2023-03-16 19:35 ` [PATCH 09/14] xfs: add multi link " Darrick J. Wong
2023-03-16 19:35 ` [PATCH 10/14] xfs: add parent pointer inject test Darrick J. Wong
2023-03-16 19:35 ` [PATCH 11/14] common/parent: add license and copyright Darrick J. Wong
2023-03-16 19:36 ` [PATCH 12/14] common/parent: don't _fail on missing parent pointer components Darrick J. Wong
2023-03-16 19:36 ` [PATCH 13/14] common/parent: check xfs_io parent command paths Darrick J. Wong
2023-03-16 19:36 ` [PATCH 14/14] xfs/851: test xfs_io parent -p too Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 0/1] xfs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:36 ` [PATCH 1/1] xfs/122: fix parent pointer ioctl structure sizes Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 0/1] fstests: encode parent pointer name in xattr key Darrick J. Wong
2023-03-16 19:37 ` [PATCH 1/1] xfs/{021,122}: adjust parent pointer encoding format Darrick J. Wong
2023-03-17 19:06 ` [RFC DELUGE v10r1d2] xfs: Parent Pointers Allison Henderson
2023-03-17 23:45 ` Darrick J. Wong
2023-03-21 21:14 ` Allison Henderson
2023-03-25 17:02 ` Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2023-02-16 20:32 [PATCHSET 00/14] fstests: adjust tests for xfs parent pointers Darrick J. Wong
2023-02-16 21:14 ` [PATCH 02/14] populate: create hardlinks for " Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=167899417681.17926.9773642875554425949.stgit@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=guan@eryu.me \
--cc=linux-xfs@vger.kernel.org \
--cc=zlang@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).