@ -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 ) ;