aboutsummaryrefslogtreecommitdiff
path: root/fs/xfs/libxfs/xfs_parent.c
diff options
context:
space:
mode:
authorAllison Henderson <[email protected]>2024-04-22 09:47:49 -0700
committerDarrick J. Wong <[email protected]>2024-04-23 07:46:59 -0700
commitd2d18330f63cd70b50eddac76de7c59a36f2faa7 (patch)
tree4c07bcad45155d9daa9ceba685f8244b64756df0 /fs/xfs/libxfs/xfs_parent.c
parent5d31a85dcc1fa4c5d4a925c6da67751653a700ba (diff)
xfs: remove parent pointers in unlink
This patch removes the parent pointer attribute during unlink Signed-off-by: Dave Chinner <[email protected]> Signed-off-by: Allison Henderson <[email protected]> Reviewed-by: Darrick J. Wong <[email protected]> [djwong: adjust to new ondisk format, minor rebase fixes] Signed-off-by: Darrick J. Wong <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]>
Diffstat (limited to 'fs/xfs/libxfs/xfs_parent.c')
-rw-r--r--fs/xfs/libxfs/xfs_parent.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_parent.c b/fs/xfs/libxfs/xfs_parent.c
index 65616cfc1a2b..6142e68f2338 100644
--- a/fs/xfs/libxfs/xfs_parent.c
+++ b/fs/xfs/libxfs/xfs_parent.c
@@ -205,3 +205,25 @@ xfs_parent_addname(
xfs_attr_defer_add(&ppargs->args, XFS_ATTR_DEFER_SET);
return 0;
}
+
+/* Remove a parent pointer to reflect a dirent removal. */
+int
+xfs_parent_removename(
+ struct xfs_trans *tp,
+ struct xfs_parent_args *ppargs,
+ struct xfs_inode *dp,
+ const struct xfs_name *parent_name,
+ struct xfs_inode *child)
+{
+ int error;
+
+ error = xfs_parent_iread_extents(tp, child);
+ if (error)
+ return error;
+
+ xfs_inode_to_parent_rec(&ppargs->rec, dp);
+ xfs_parent_da_args_init(&ppargs->args, tp, &ppargs->rec, child,
+ child->i_ino, parent_name);
+ xfs_attr_defer_add(&ppargs->args, XFS_ATTR_DEFER_REMOVE);
+ return 0;
+}