|
@@ -692,6 +692,24 @@ xfs_da_join(xfs_da_state_t *state)
|
|
|
return(error);
|
|
|
}
|
|
|
|
|
|
+#ifdef DEBUG
|
|
|
+static void
|
|
|
+xfs_da_blkinfo_onlychild_validate(struct xfs_da_blkinfo *blkinfo, __u16 level)
|
|
|
+{
|
|
|
+ __be16 magic = blkinfo->magic;
|
|
|
+
|
|
|
+ if (level == 1) {
|
|
|
+ ASSERT(magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) ||
|
|
|
+ magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC));
|
|
|
+ } else
|
|
|
+ ASSERT(magic == cpu_to_be16(XFS_DA_NODE_MAGIC));
|
|
|
+ ASSERT(!blkinfo->forw);
|
|
|
+ ASSERT(!blkinfo->back);
|
|
|
+}
|
|
|
+#else /* !DEBUG */
|
|
|
+#define xfs_da_blkinfo_onlychild_validate(blkinfo, level)
|
|
|
+#endif /* !DEBUG */
|
|
|
+
|
|
|
/*
|
|
|
* We have only one entry in the root. Copy the only remaining child of
|
|
|
* the old root to block 0 as the new root node.
|
|
@@ -700,8 +718,6 @@ STATIC int
|
|
|
xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk)
|
|
|
{
|
|
|
xfs_da_intnode_t *oldroot;
|
|
|
- /* REFERENCED */
|
|
|
- xfs_da_blkinfo_t *blkinfo;
|
|
|
xfs_da_args_t *args;
|
|
|
xfs_dablk_t child;
|
|
|
xfs_dabuf_t *bp;
|
|
@@ -732,15 +748,9 @@ xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk)
|
|
|
if (error)
|
|
|
return(error);
|
|
|
ASSERT(bp != NULL);
|
|
|
- blkinfo = bp->data;
|
|
|
- if (be16_to_cpu(oldroot->hdr.level) == 1) {
|
|
|
- ASSERT(blkinfo->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) ||
|
|
|
- blkinfo->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC));
|
|
|
- } else {
|
|
|
- ASSERT(blkinfo->magic == cpu_to_be16(XFS_DA_NODE_MAGIC));
|
|
|
- }
|
|
|
- ASSERT(!blkinfo->forw);
|
|
|
- ASSERT(!blkinfo->back);
|
|
|
+ xfs_da_blkinfo_onlychild_validate(bp->data,
|
|
|
+ be16_to_cpu(oldroot->hdr.level));
|
|
|
+
|
|
|
memcpy(root_blk->bp->data, bp->data, state->blocksize);
|
|
|
xfs_da_log_buf(args->trans, root_blk->bp, 0, state->blocksize - 1);
|
|
|
error = xfs_da_shrink_inode(args, child, bp);
|