]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: factor out xfs_attr3_node_entry_remove
authorLong Li <leo.lilong@huawei.com>
Tue, 17 Mar 2026 01:51:53 +0000 (09:51 +0800)
committerCarlos Maiolino <cem@kernel.org>
Mon, 23 Mar 2026 09:47:28 +0000 (10:47 +0100)
Factor out wrapper xfs_attr3_node_entry_remove function, which
exported for external use.

Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Long Li <leo.lilong@huawei.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/libxfs/xfs_da_btree.c
fs/xfs/libxfs/xfs_da_btree.h

index 09d4c17b3e7ba2235c60cb3edc71c668cba32d6f..ad801b7bd2dd19bbe27c864d7d0c12c897e327e2 100644 (file)
@@ -1506,21 +1506,20 @@ xfs_da3_fixhashpath(
 }
 
 /*
- * Remove an entry from an intermediate node.
+ * Internal implementation to remove an entry from an intermediate node.
  */
 STATIC void
-xfs_da3_node_remove(
-       struct xfs_da_state     *state,
-       struct xfs_da_state_blk *drop_blk)
+__xfs_da3_node_remove(
+       struct xfs_trans        *tp,
+       struct xfs_inode        *dp,
+       struct xfs_da_geometry  *geo,
+       struct xfs_da_state_blk *drop_blk)
 {
        struct xfs_da_intnode   *node;
        struct xfs_da3_icnode_hdr nodehdr;
        struct xfs_da_node_entry *btree;
        int                     index;
        int                     tmp;
-       struct xfs_inode        *dp = state->args->dp;
-
-       trace_xfs_da_node_remove(state->args);
 
        node = drop_blk->bp->b_addr;
        xfs_da3_node_hdr_from_disk(dp->i_mount, &nodehdr, node);
@@ -1536,17 +1535,17 @@ xfs_da3_node_remove(
                tmp  = nodehdr.count - index - 1;
                tmp *= (uint)sizeof(xfs_da_node_entry_t);
                memmove(&btree[index], &btree[index + 1], tmp);
-               xfs_trans_log_buf(state->args->trans, drop_blk->bp,
+               xfs_trans_log_buf(tp, drop_blk->bp,
                    XFS_DA_LOGRANGE(node, &btree[index], tmp));
                index = nodehdr.count - 1;
        }
        memset(&btree[index], 0, sizeof(xfs_da_node_entry_t));
-       xfs_trans_log_buf(state->args->trans, drop_blk->bp,
+       xfs_trans_log_buf(tp, drop_blk->bp,
            XFS_DA_LOGRANGE(node, &btree[index], sizeof(btree[index])));
        nodehdr.count -= 1;
        xfs_da3_node_hdr_to_disk(dp->i_mount, node, &nodehdr);
-       xfs_trans_log_buf(state->args->trans, drop_blk->bp,
-           XFS_DA_LOGRANGE(node, &node->hdr, state->args->geo->node_hdr_size));
+       xfs_trans_log_buf(tp, drop_blk->bp,
+           XFS_DA_LOGRANGE(node, &node->hdr, geo->node_hdr_size));
 
        /*
         * Copy the last hash value from the block to propagate upwards.
@@ -1554,6 +1553,38 @@ xfs_da3_node_remove(
        drop_blk->hashval = be32_to_cpu(btree[index - 1].hashval);
 }
 
+/*
+ * Remove an entry from an intermediate node.
+ */
+STATIC void
+xfs_da3_node_remove(
+       struct xfs_da_state     *state,
+       struct xfs_da_state_blk *drop_blk)
+{
+       trace_xfs_da_node_remove(state->args);
+
+       __xfs_da3_node_remove(state->args->trans, state->args->dp,
+                       state->args->geo, drop_blk);
+}
+
+/*
+ * Remove an entry from an intermediate attr node at the specified index.
+ */
+void
+xfs_attr3_node_entry_remove(
+       struct xfs_trans        *tp,
+       struct xfs_inode        *dp,
+       struct xfs_buf          *bp,
+       int                     index)
+{
+       struct xfs_da_state_blk blk = {
+               .index          = index,
+               .bp             = bp,
+       };
+
+       __xfs_da3_node_remove(tp, dp, dp->i_mount->m_attr_geo, &blk);
+}
+
 /*
  * Unbalance the elements between two intermediate nodes,
  * move all Btree elements from one node into another.
index 354d5d65043e432af0261297f16f198c82fd636d..afcf2d3c7a21c016484c736bd83984bd7d16a0e4 100644 (file)
@@ -184,6 +184,8 @@ int xfs_da3_split(xfs_da_state_t *state);
 int    xfs_da3_join(xfs_da_state_t *state);
 void   xfs_da3_fixhashpath(struct xfs_da_state *state,
                            struct xfs_da_state_path *path_to_to_fix);
+void   xfs_attr3_node_entry_remove(struct xfs_trans *tp, struct xfs_inode *dp,
+                           struct xfs_buf *bp, int index);
 
 /*
  * Routines used for finding things in the Btree.