All of lore.kernel.org
 help / color / mirror / Atom feed
From: allison.henderson@oracle.com
To: linux-xfs@vger.kernel.org
Subject: [PATCH v5 06/25] xfsprogs: get directory offset when replacing a directory name
Date: Thu, 10 Nov 2022 14:05:08 -0700	[thread overview]
Message-ID: <20221110210527.56628-7-allison.henderson@oracle.com> (raw)
In-Reply-To: <20221110210527.56628-1-allison.henderson@oracle.com>

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

Return the directory offset information when replacing an entry to the
directory.

This offset will be used as the parent pointer offset in xfs_rename.

Signed-off-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
---
 libxfs/xfs_dir2.c       | 8 ++++++--
 libxfs/xfs_dir2.h       | 2 +-
 libxfs/xfs_dir2_block.c | 4 ++--
 libxfs/xfs_dir2_leaf.c  | 1 +
 libxfs/xfs_dir2_node.c  | 1 +
 libxfs/xfs_dir2_sf.c    | 2 ++
 repair/phase6.c         | 2 +-
 7 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/libxfs/xfs_dir2.c b/libxfs/xfs_dir2.c
index 01cc157e33b7..cba47701e3bd 100644
--- a/libxfs/xfs_dir2.c
+++ b/libxfs/xfs_dir2.c
@@ -481,7 +481,7 @@ xfs_dir_removename(
 	else
 		rval = xfs_dir2_node_removename(args);
 out_free:
-	if (offset)
+	if (!rval && offset)
 		*offset = args->offset;
 
 	kmem_free(args);
@@ -497,7 +497,8 @@ xfs_dir_replace(
 	struct xfs_inode	*dp,
 	const struct xfs_name	*name,		/* name of entry to replace */
 	xfs_ino_t		inum,		/* new inode number */
-	xfs_extlen_t		total)		/* bmap's total block count */
+	xfs_extlen_t		total,		/* bmap's total block count */
+	xfs_dir2_dataptr_t	*offset)	/* OUT: offset in directory */
 {
 	struct xfs_da_args	*args;
 	int			rval;
@@ -545,6 +546,9 @@ xfs_dir_replace(
 	else
 		rval = xfs_dir2_node_replace(args);
 out_free:
+	if (offset)
+		*offset = args->offset;
+
 	kmem_free(args);
 	return rval;
 }
diff --git a/libxfs/xfs_dir2.h b/libxfs/xfs_dir2.h
index c581d3b19bc6..fd943c0c00a0 100644
--- a/libxfs/xfs_dir2.h
+++ b/libxfs/xfs_dir2.h
@@ -50,7 +50,7 @@ extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp,
 				xfs_dir2_dataptr_t *offset);
 extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp,
 				const struct xfs_name *name, xfs_ino_t inum,
-				xfs_extlen_t tot);
+				xfs_extlen_t tot, xfs_dir2_dataptr_t *offset);
 extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp,
 				struct xfs_name *name);
 
diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c
index 43b9c18ff6be..c743fa67dbaa 100644
--- a/libxfs/xfs_dir2_block.c
+++ b/libxfs/xfs_dir2_block.c
@@ -882,9 +882,9 @@ xfs_dir2_block_replace(
 	/*
 	 * Point to the data entry we need to change.
 	 */
+	args->offset = be32_to_cpu(blp[ent].address);
 	dep = (xfs_dir2_data_entry_t *)((char *)hdr +
-			xfs_dir2_dataptr_to_off(args->geo,
-						be32_to_cpu(blp[ent].address)));
+			xfs_dir2_dataptr_to_off(args->geo, args->offset));
 	ASSERT(be64_to_cpu(dep->inumber) != args->inumber);
 	/*
 	 * Change the inode number to the new value.
diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c
index 3a7e09756dde..136830ec4e3c 100644
--- a/libxfs/xfs_dir2_leaf.c
+++ b/libxfs/xfs_dir2_leaf.c
@@ -1516,6 +1516,7 @@ xfs_dir2_leaf_replace(
 	/*
 	 * Point to the data entry.
 	 */
+	args->offset = be32_to_cpu(lep->address);
 	dep = (xfs_dir2_data_entry_t *)
 	      ((char *)dbp->b_addr +
 	       xfs_dir2_dataptr_to_off(args->geo, be32_to_cpu(lep->address)));
diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c
index ac6a70896adb..621e8bf53ad8 100644
--- a/libxfs/xfs_dir2_node.c
+++ b/libxfs/xfs_dir2_node.c
@@ -2239,6 +2239,7 @@ xfs_dir2_node_replace(
 		hdr = state->extrablk.bp->b_addr;
 		ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) ||
 		       hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC));
+		args->offset = be32_to_cpu(leafhdr.ents[blk->index].address);
 		dep = (xfs_dir2_data_entry_t *)
 		      ((char *)hdr +
 		       xfs_dir2_dataptr_to_off(args->geo,
diff --git a/libxfs/xfs_dir2_sf.c b/libxfs/xfs_dir2_sf.c
index b2b37821492f..5858821c9311 100644
--- a/libxfs/xfs_dir2_sf.c
+++ b/libxfs/xfs_dir2_sf.c
@@ -1109,6 +1109,8 @@ xfs_dir2_sf_replace(
 				xfs_dir2_sf_put_ino(mp, sfp, sfep,
 						args->inumber);
 				xfs_dir2_sf_put_ftype(mp, sfep, args->filetype);
+				args->offset = xfs_dir2_byte_to_dataptr(
+						  xfs_dir2_sf_get_offset(sfep));
 				break;
 			}
 		}
diff --git a/repair/phase6.c b/repair/phase6.c
index f5f4fcea4bd6..93da70dd4f30 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -1122,7 +1122,7 @@ mv_orphanage(
 			if (entry_ino_num != orphanage_ino)  {
 				err = -libxfs_dir_replace(tp, ino_p,
 						&xfs_name_dotdot, orphanage_ino,
-						nres);
+						nres, NULL);
 				if (err)
 					do_error(
 	_("name replace op failed (%d)\n"), err);
-- 
2.25.1


  parent reply	other threads:[~2022-11-10 21:31 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-10 21:05 [PATCH v5 00/25] xfsprogs: parent pointers for v5 allison.henderson
2022-11-10 21:05 ` [PATCH v5 01/25] xfsprogs: Fix default superblock attr bits allison.henderson
2022-11-10 21:05 ` [PATCH v5 02/25] xfsprogs: Add new name to attri/d allison.henderson
2022-11-10 21:05 ` [PATCH v5 03/25] xfsprogs: Increase XFS_DEFER_OPS_NR_INODES to 5 allison.henderson
2022-11-10 21:05 ` [PATCH v5 04/25] xfsprogs: get directory offset when adding directory name allison.henderson
2022-11-10 21:05 ` [PATCH v5 05/25] xfsprogs: get directory offset when removing " allison.henderson
2022-11-10 21:05 ` allison.henderson [this message]
2022-11-10 21:05 ` [PATCH v5 07/25] xfsprogs: add parent pointer support to attribute code allison.henderson
2022-11-10 21:05 ` [PATCH v5 08/25] xfsprogs: define parent pointer xattr format allison.henderson
2022-11-10 21:05 ` [PATCH v5 09/25] xfsprogs: Add xfs_verify_pptr allison.henderson
2022-11-10 21:05 ` [PATCH v5 10/25] xfsprogs: Increase rename inode reservation allison.henderson
2022-11-10 21:05 ` [PATCH v5 11/25] xfsprogs: extend transaction reservations for parent attributes allison.henderson
2022-11-10 21:05 ` [PATCH v5 12/25] xfsprogs: add parent attributes to link allison.henderson
2022-11-10 21:05 ` [PATCH v5 13/25] xfsprogs: add parent attributes to symlink allison.henderson
2022-11-10 21:05 ` [PATCH v5 14/25] xfsprogs: parent pointer attribute creation allison.henderson
2022-11-10 21:05 ` [PATCH v5 15/25] xfsprogs: remove parent pointers in unlink allison.henderson
2022-11-10 21:05 ` [PATCH v5 16/25] xfsprogs: Add parent pointers to rename allison.henderson
2022-11-10 21:05 ` [PATCH v5 17/25] xfsprogs: Add the parent pointer support to the superblock version 5 allison.henderson
2022-11-10 21:05 ` [PATCH v5 18/25] xfsprogs: Add parent pointer ioctl allison.henderson
2022-11-10 21:05 ` [PATCH v5 19/25] xfsprogs: fix unit conversion error in xfs_log_calc_max_attrsetm_res allison.henderson
2022-11-10 21:05 ` [PATCH v5 20/25] xfsprogs: drop compatibility minimum log size computations for reflink allison.henderson
2022-11-10 21:05 ` [PATCH v5 21/25] xfsprogs: Add parent pointer flag to cmd allison.henderson
2022-11-10 21:05 ` [PATCH v5 22/25] xfsprogs: Print pptrs in ATTRI items allison.henderson
2022-11-10 21:05 ` [PATCH v5 23/25] xfsprogs: implement the upper half of parent pointers allison.henderson
2022-11-10 21:05 ` [PATCH v5 24/25] xfsprogs: Add parent pointers during protofile creation allison.henderson
2022-11-10 21:05 ` [PATCH v5 25/25] xfsprogs: Add i, n and f flags to parent command allison.henderson

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=20221110210527.56628-7-allison.henderson@oracle.com \
    --to=allison.henderson@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.