From: "Darrick J. Wong" <djwong@kernel.org>
To: Allison Henderson <allison.henderson@oracle.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v1 05/17] xfs: get directory offset when replacing a directory name
Date: Wed, 29 Jun 2022 11:30:45 -0700 [thread overview]
Message-ID: <YryaVadQSphHB1xa@magnolia> (raw)
In-Reply-To: <20220611094200.129502-6-allison.henderson@oracle.com>
On Sat, Jun 11, 2022 at 02:41:48AM -0700, Allison Henderson wrote:
> 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.
>
> [dchinner: forward ported and cleaned up]
> [achender: rebased, changed __unint32_t to xfs_dir2_dataptr_t,
> Changed typedefs to raw struct types]
>
> 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 <darrick.wong@oracle.com>
Looks good,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_dir2.c | 8 ++++++--
> fs/xfs/libxfs/xfs_dir2.h | 2 +-
> fs/xfs/libxfs/xfs_dir2_block.c | 4 ++--
> fs/xfs/libxfs/xfs_dir2_leaf.c | 1 +
> fs/xfs/libxfs/xfs_dir2_node.c | 1 +
> fs/xfs/libxfs/xfs_dir2_sf.c | 2 ++
> fs/xfs/xfs_inode.c | 16 ++++++++--------
> 7 files changed, 21 insertions(+), 13 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c
> index c3fa1bd1c370..6af2f5a8e627 100644
> --- a/fs/xfs/libxfs/xfs_dir2.c
> +++ b/fs/xfs/libxfs/xfs_dir2.c
> @@ -482,7 +482,7 @@ xfs_dir_removename(
> else
> rval = xfs_dir2_node_removename(args);
> out_free:
> - if (offset)
> + if (!rval && offset)
> *offset = args->offset;
>
> kmem_free(args);
> @@ -498,7 +498,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;
> @@ -546,6 +547,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/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h
> index c581d3b19bc6..fd943c0c00a0 100644
> --- a/fs/xfs/libxfs/xfs_dir2.h
> +++ b/fs/xfs/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/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c
> index 4579e9be5d1a..ee8905d16223 100644
> --- a/fs/xfs/libxfs/xfs_dir2_block.c
> +++ b/fs/xfs/libxfs/xfs_dir2_block.c
> @@ -885,9 +885,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/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c
> index c13763c16095..958b9fea64bd 100644
> --- a/fs/xfs/libxfs/xfs_dir2_leaf.c
> +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c
> @@ -1518,6 +1518,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/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
> index 39cbdeafa0f6..53cd0d5d94f7 100644
> --- a/fs/xfs/libxfs/xfs_dir2_node.c
> +++ b/fs/xfs/libxfs/xfs_dir2_node.c
> @@ -2242,6 +2242,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/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c
> index 51d42faabb18..1de51eded26b 100644
> --- a/fs/xfs/libxfs/xfs_dir2_sf.c
> +++ b/fs/xfs/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/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 0c0c82e5dc59..b2dfd84e1f62 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -2817,7 +2817,7 @@ xfs_remove(
> */
> if (dp->i_ino != tp->t_mountp->m_sb.sb_rootino) {
> error = xfs_dir_replace(tp, ip, &xfs_name_dotdot,
> - tp->t_mountp->m_sb.sb_rootino, 0);
> + tp->t_mountp->m_sb.sb_rootino, 0, NULL);
> if (error)
> return error;
> }
> @@ -2952,12 +2952,12 @@ xfs_cross_rename(
> int dp2_flags = 0;
>
> /* Swap inode number for dirent in first parent */
> - error = xfs_dir_replace(tp, dp1, name1, ip2->i_ino, spaceres);
> + error = xfs_dir_replace(tp, dp1, name1, ip2->i_ino, spaceres, NULL);
> if (error)
> goto out_trans_abort;
>
> /* Swap inode number for dirent in second parent */
> - error = xfs_dir_replace(tp, dp2, name2, ip1->i_ino, spaceres);
> + error = xfs_dir_replace(tp, dp2, name2, ip1->i_ino, spaceres, NULL);
> if (error)
> goto out_trans_abort;
>
> @@ -2971,7 +2971,7 @@ xfs_cross_rename(
>
> if (S_ISDIR(VFS_I(ip2)->i_mode)) {
> error = xfs_dir_replace(tp, ip2, &xfs_name_dotdot,
> - dp1->i_ino, spaceres);
> + dp1->i_ino, spaceres, NULL);
> if (error)
> goto out_trans_abort;
>
> @@ -2995,7 +2995,7 @@ xfs_cross_rename(
>
> if (S_ISDIR(VFS_I(ip1)->i_mode)) {
> error = xfs_dir_replace(tp, ip1, &xfs_name_dotdot,
> - dp2->i_ino, spaceres);
> + dp2->i_ino, spaceres, NULL);
> if (error)
> goto out_trans_abort;
>
> @@ -3315,7 +3315,7 @@ xfs_rename(
> * name at the destination directory, remove it first.
> */
> error = xfs_dir_replace(tp, target_dp, target_name,
> - src_ip->i_ino, spaceres);
> + src_ip->i_ino, spaceres, NULL);
> if (error)
> goto out_trans_cancel;
>
> @@ -3349,7 +3349,7 @@ xfs_rename(
> * directory.
> */
> error = xfs_dir_replace(tp, src_ip, &xfs_name_dotdot,
> - target_dp->i_ino, spaceres);
> + target_dp->i_ino, spaceres, NULL);
> ASSERT(error != -EEXIST);
> if (error)
> goto out_trans_cancel;
> @@ -3388,7 +3388,7 @@ xfs_rename(
> */
> if (wip)
> error = xfs_dir_replace(tp, src_dp, src_name, wip->i_ino,
> - spaceres);
> + spaceres, NULL);
> else
> error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino,
> spaceres, NULL);
> --
> 2.25.1
>
next prev parent reply other threads:[~2022-06-29 18:30 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-11 9:41 [PATCH v1 00/17] Return of the Parent Pointers Allison Henderson
2022-06-11 9:41 ` [PATCH v1 01/17] xfs: Add larp state XFS_DAS_CREATE_FORK Allison Henderson
2022-06-15 1:09 ` Dave Chinner
2022-06-15 23:40 ` Alli
2022-06-16 2:08 ` Dave Chinner
2022-06-16 5:32 ` Dave Chinner
2022-06-29 6:33 ` Alli
2022-06-30 0:40 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 02/17] xfs: Hold inode locks in xfs_ialloc Allison Henderson
2022-06-29 18:28 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 03/17] xfs: get directory offset when adding directory name Allison Henderson
2022-06-29 18:29 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 04/17] xfs: get directory offset when removing " Allison Henderson
2022-06-29 18:30 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 05/17] xfs: get directory offset when replacing a " Allison Henderson
2022-06-29 18:30 ` Darrick J. Wong [this message]
2022-06-11 9:41 ` [PATCH v1 06/17] xfs: add parent pointer support to attribute code Allison Henderson
2022-06-29 18:33 ` Darrick J. Wong
2022-06-29 18:58 ` Alli
2022-06-11 9:41 ` [PATCH v1 07/17] xfs: define parent pointer xattr format Allison Henderson
2022-06-29 18:34 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 08/17] xfs: Add xfs_verify_pptr Allison Henderson
2022-06-29 18:35 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 09/17] xfs: extent transaction reservations for parent attributes Allison Henderson
2022-06-16 5:38 ` Dave Chinner
2022-06-18 0:31 ` Alli
2022-06-29 18:37 ` Darrick J. Wong
2022-06-29 19:23 ` Alli
2022-06-11 9:41 ` [PATCH v1 10/17] xfs: parent pointer attribute creation Allison Henderson
2022-06-16 5:49 ` Dave Chinner
2022-06-18 0:32 ` Alli
2022-06-29 18:41 ` Darrick J. Wong
2022-06-30 1:29 ` Alli
2022-06-11 9:41 ` [PATCH v1 11/17] xfs: add parent attributes to link Allison Henderson
2022-06-16 22:39 ` Dave Chinner
2022-06-18 0:32 ` Alli
2022-06-29 18:09 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 12/17] xfs: remove parent pointers in unlink Allison Henderson
2022-06-29 17:35 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 13/17] xfs: Add parent pointers to rename Allison Henderson
2022-06-29 18:02 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 14/17] xfs: Add the parent pointer support to the superblock version 5 Allison Henderson
2022-06-16 6:03 ` Dave Chinner
2022-06-18 0:32 ` Alli
2022-06-20 0:21 ` Dave Chinner
2022-06-29 18:16 ` Darrick J. Wong
2022-06-11 9:41 ` [PATCH v1 15/17] xfs: Add helper function xfs_attr_list_context_init Allison Henderson
2022-06-29 18:42 ` Darrick J. Wong
2022-06-30 1:30 ` Alli
2022-06-11 9:41 ` [PATCH v1 16/17] xfs: Increase XFS_DEFER_OPS_NR_INODES to 4 Allison Henderson
2022-06-16 21:54 ` Dave Chinner
2022-06-18 0:32 ` Alli
2022-06-29 18:43 ` Darrick J. Wong
2022-06-30 1:30 ` Alli
2022-06-11 9:42 ` [PATCH v1 17/17] xfs: Add parent pointer ioctl Allison Henderson
2022-06-29 18:52 ` Darrick J. Wong
2022-06-30 1:30 ` Alli
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=YryaVadQSphHB1xa@magnolia \
--to=djwong@kernel.org \
--cc=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox