xfs: factor out xfs_attr3_node_entry_remove
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>
This commit is contained in:
parent
e942498385
commit
ce4e789cf3
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue