[XFS] implement generic xfs_btree_updkey

From: Dave Chinner <dgc@sgi.com>

Note that there are many > 80 char lines introduced due to the
xfs_btree_key casts. But the places where this happens is throw-away code
once the whole btree code gets merged into a common implementation.

The same is true for the temporary xfs_alloc_log_keys define to the new
name. All old users will be gone after a few patches.

[hch: split out from bigger patch and minor adaptions]

SGI-PV: 985583

SGI-Modid: xfs-linux-melb:xfs-kern:32193a

Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Bill O'Donnell <billodo@sgi.com>
Signed-off-by: David Chinner <david@fromorbit.com>
This commit is contained in:
Christoph Hellwig
2008-10-30 16:56:22 +11:00
committed by Lachlan McIlroy
parent fe033cc848
commit 38bb74237d
5 changed files with 103 additions and 134 deletions

View File

@ -48,7 +48,6 @@ STATIC int xfs_inobt_newroot(xfs_btree_cur_t *, int *);
STATIC int xfs_inobt_rshift(xfs_btree_cur_t *, int, int *);
STATIC int xfs_inobt_split(xfs_btree_cur_t *, int, xfs_agblock_t *,
xfs_inobt_key_t *, xfs_btree_cur_t **, int *);
STATIC int xfs_inobt_updkey(xfs_btree_cur_t *, xfs_inobt_key_t *, int);
/*
* Single level of the xfs_inobt_delete record deletion routine.
@ -214,7 +213,7 @@ xfs_inobt_delrec(
* If we deleted the leftmost entry in the block, update the
* key values above us in the tree.
*/
if (ptr == 1 && (error = xfs_inobt_updkey(cur, kp, level + 1)))
if (ptr == 1 && (error = xfs_btree_updkey(cur, (union xfs_btree_key *)kp, level + 1)))
return error;
/*
* If the number of records remaining in the block is at least
@ -723,7 +722,7 @@ xfs_inobt_insrec(
/*
* If we inserted at the start of a block, update the parents' keys.
*/
if (optr == 1 && (error = xfs_inobt_updkey(cur, &key, level + 1)))
if (optr == 1 && (error = xfs_btree_updkey(cur, (union xfs_btree_key *)&key, level + 1)))
return error;
/*
* Return the new block number, if any.
@ -960,7 +959,7 @@ xfs_inobt_lshift(
/*
* Update the parent key values of right.
*/
if ((error = xfs_inobt_updkey(cur, rkp, level + 1)))
if ((error = xfs_btree_updkey(cur, (union xfs_btree_key *)rkp, level + 1)))
return error;
/*
* Slide the cursor value left one.
@ -1238,7 +1237,7 @@ xfs_inobt_rshift(
return error;
xfs_btree_lastrec(tcur, level);
if ((error = xfs_btree_increment(tcur, level, &i)) ||
(error = xfs_inobt_updkey(tcur, rkp, level + 1))) {
(error = xfs_btree_updkey(tcur, (union xfs_btree_key *)rkp, level + 1))) {
xfs_btree_del_cursor(tcur, XFS_BTREE_ERROR);
return error;
}
@ -1406,45 +1405,6 @@ xfs_inobt_split(
return 0;
}
/*
* Update keys at all levels from here to the root along the cursor's path.
*/
STATIC int /* error */
xfs_inobt_updkey(
xfs_btree_cur_t *cur, /* btree cursor */
xfs_inobt_key_t *keyp, /* new key value to update to */
int level) /* starting level for update */
{
int ptr; /* index of key in block */
/*
* Go up the tree from this level toward the root.
* At each level, update the key value to the value input.
* Stop when we reach a level where the cursor isn't pointing
* at the first entry in the block.
*/
for (ptr = 1; ptr == 1 && level < cur->bc_nlevels; level++) {
xfs_buf_t *bp; /* buffer for block */
xfs_inobt_block_t *block; /* btree block */
#ifdef DEBUG
int error; /* error return value */
#endif
xfs_inobt_key_t *kp; /* ptr to btree block keys */
bp = cur->bc_bufs[level];
block = XFS_BUF_TO_INOBT_BLOCK(bp);
#ifdef DEBUG
if ((error = xfs_btree_check_sblock(cur, block, level, bp)))
return error;
#endif
ptr = cur->bc_ptrs[level];
kp = XFS_INOBT_KEY_ADDR(block, ptr, cur);
*kp = *keyp;
xfs_inobt_log_keys(cur, bp, ptr, ptr);
}
return 0;
}
/*
* Externally visible routines.
*/
@ -1637,7 +1597,7 @@ xfs_inobt_update(
xfs_inobt_key_t key; /* key containing [ino] */
key.ir_startino = cpu_to_be32(ino);
if ((error = xfs_inobt_updkey(cur, &key, 1)))
if ((error = xfs_btree_updkey(cur, (union xfs_btree_key *)&key, 1)))
return error;
}
return 0;