aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/xfs_alloc.c23
-rw-r--r--fs/xfs/xfs_alloc_btree.c2
-rw-r--r--fs/xfs/xfs_alloc_btree.h18
-rw-r--r--fs/xfs/xfs_bmap.c71
-rw-r--r--fs/xfs/xfs_bmap_btree.c14
-rw-r--r--fs/xfs/xfs_bmap_btree.h23
-rw-r--r--fs/xfs/xfs_btree.c81
-rw-r--r--fs/xfs/xfs_btree.h53
-rw-r--r--fs/xfs/xfs_dinode.h2
-rw-r--r--fs/xfs/xfs_fsops.c20
-rw-r--r--fs/xfs/xfs_ialloc_btree.c2
-rw-r--r--fs/xfs/xfs_ialloc_btree.h19
-rw-r--r--fs/xfs/xfs_inode.c13
-rw-r--r--fs/xfs/xfs_inode.h3
-rw-r--r--fs/xfs/xfs_log_recover.c8
15 files changed, 165 insertions, 187 deletions
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c
index 0a2a87208b17..c47ce9075728 100644
--- a/fs/xfs/xfs_alloc.c
+++ b/fs/xfs/xfs_alloc.c
@@ -380,21 +380,20 @@ xfs_alloc_fixup_trees(
380 return error; 380 return error;
381 XFS_WANT_CORRUPTED_RETURN(i == 1); 381 XFS_WANT_CORRUPTED_RETURN(i == 1);
382 } 382 }
383
383#ifdef DEBUG 384#ifdef DEBUG
384 { 385 if (bno_cur->bc_nlevels == 1 && cnt_cur->bc_nlevels == 1) {
385 xfs_alloc_block_t *bnoblock; 386 struct xfs_btree_block *bnoblock;
386 xfs_alloc_block_t *cntblock; 387 struct xfs_btree_block *cntblock;
387 388
388 if (bno_cur->bc_nlevels == 1 && 389 bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_bufs[0]);
389 cnt_cur->bc_nlevels == 1) { 390 cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]);
390 bnoblock = XFS_BUF_TO_ALLOC_BLOCK(bno_cur->bc_bufs[0]); 391
391 cntblock = XFS_BUF_TO_ALLOC_BLOCK(cnt_cur->bc_bufs[0]); 392 XFS_WANT_CORRUPTED_RETURN(
392 XFS_WANT_CORRUPTED_RETURN( 393 bnoblock->bb_numrecs == cntblock->bb_numrecs);
393 be16_to_cpu(bnoblock->bb_numrecs) ==
394 be16_to_cpu(cntblock->bb_numrecs));
395 }
396 } 394 }
397#endif 395#endif
396
398 /* 397 /*
399 * Deal with all four cases: the allocated record is contained 398 * Deal with all four cases: the allocated record is contained
400 * within the freespace record, so we can have new freespace 399 * within the freespace record, so we can have new freespace
diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c
index 72c083f62a94..733cb75a8c5d 100644
--- a/fs/xfs/xfs_alloc_btree.c
+++ b/fs/xfs/xfs_alloc_btree.c
@@ -490,7 +490,7 @@ xfs_allocbt_maxrecs(
490 int blocklen, 490 int blocklen,
491 int leaf) 491 int leaf)
492{ 492{
493 blocklen -= sizeof(struct xfs_btree_sblock); 493 blocklen -= XFS_ALLOC_BLOCK_LEN(mp);
494 494
495 if (leaf) 495 if (leaf)
496 return blocklen / sizeof(xfs_alloc_rec_t); 496 return blocklen / sizeof(xfs_alloc_rec_t);
diff --git a/fs/xfs/xfs_alloc_btree.h b/fs/xfs/xfs_alloc_btree.h
index 579f9c7e0872..a6caa0022c9b 100644
--- a/fs/xfs/xfs_alloc_btree.h
+++ b/fs/xfs/xfs_alloc_btree.h
@@ -24,7 +24,6 @@
24 24
25struct xfs_buf; 25struct xfs_buf;
26struct xfs_btree_cur; 26struct xfs_btree_cur;
27struct xfs_btree_sblock;
28struct xfs_mount; 27struct xfs_mount;
29 28
30/* 29/*
@@ -50,10 +49,6 @@ typedef struct xfs_alloc_rec_incore {
50 49
51/* btree pointer type */ 50/* btree pointer type */
52typedef __be32 xfs_alloc_ptr_t; 51typedef __be32 xfs_alloc_ptr_t;
53/* btree block header type */
54typedef struct xfs_btree_sblock xfs_alloc_block_t;
55
56#define XFS_BUF_TO_ALLOC_BLOCK(bp) ((xfs_alloc_block_t *)XFS_BUF_PTR(bp))
57 52
58/* 53/*
59 * Minimum and maximum blocksize and sectorsize. 54 * Minimum and maximum blocksize and sectorsize.
@@ -77,6 +72,13 @@ typedef struct xfs_btree_sblock xfs_alloc_block_t;
77#define XFS_CNT_BLOCK(mp) ((xfs_agblock_t)(XFS_BNO_BLOCK(mp) + 1)) 72#define XFS_CNT_BLOCK(mp) ((xfs_agblock_t)(XFS_BNO_BLOCK(mp) + 1))
78 73
79/* 74/*
75 * Btree block header size depends on a superblock flag.
76 *
77 * (not quite yet, but soon)
78 */
79#define XFS_ALLOC_BLOCK_LEN(mp) XFS_BTREE_SBLOCK_LEN
80
81/*
80 * Record, key, and pointer address macros for btree blocks. 82 * Record, key, and pointer address macros for btree blocks.
81 * 83 *
82 * (note that some of these may appear unused, but they are used in userspace) 84 * (note that some of these may appear unused, but they are used in userspace)
@@ -84,19 +86,19 @@ typedef struct xfs_btree_sblock xfs_alloc_block_t;
84#define XFS_ALLOC_REC_ADDR(mp, block, index) \ 86#define XFS_ALLOC_REC_ADDR(mp, block, index) \
85 ((xfs_alloc_rec_t *) \ 87 ((xfs_alloc_rec_t *) \
86 ((char *)(block) + \ 88 ((char *)(block) + \
87 sizeof(struct xfs_btree_sblock) + \ 89 XFS_ALLOC_BLOCK_LEN(mp) + \
88 (((index) - 1) * sizeof(xfs_alloc_rec_t)))) 90 (((index) - 1) * sizeof(xfs_alloc_rec_t))))
89 91
90#define XFS_ALLOC_KEY_ADDR(mp, block, index) \ 92#define XFS_ALLOC_KEY_ADDR(mp, block, index) \
91 ((xfs_alloc_key_t *) \ 93 ((xfs_alloc_key_t *) \
92 ((char *)(block) + \ 94 ((char *)(block) + \
93 sizeof(struct xfs_btree_sblock) + \ 95 XFS_ALLOC_BLOCK_LEN(mp) + \
94 ((index) - 1) * sizeof(xfs_alloc_key_t))) 96 ((index) - 1) * sizeof(xfs_alloc_key_t)))
95 97
96#define XFS_ALLOC_PTR_ADDR(mp, block, index, maxrecs) \ 98#define XFS_ALLOC_PTR_ADDR(mp, block, index, maxrecs) \
97 ((xfs_alloc_ptr_t *) \ 99 ((xfs_alloc_ptr_t *) \
98 ((char *)(block) + \ 100 ((char *)(block) + \
99 sizeof(struct xfs_btree_sblock) + \ 101 XFS_ALLOC_BLOCK_LEN(mp) + \
100 (maxrecs) * sizeof(xfs_alloc_key_t) + \ 102 (maxrecs) * sizeof(xfs_alloc_key_t) + \
101 ((index) - 1) * sizeof(xfs_alloc_ptr_t))) 103 ((index) - 1) * sizeof(xfs_alloc_ptr_t)))
102 104
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
index 3dab937d4b85..7796a0c140eb 100644
--- a/fs/xfs/xfs_bmap.c
+++ b/fs/xfs/xfs_bmap.c
@@ -394,7 +394,7 @@ xfs_bmap_count_leaves(
394STATIC void 394STATIC void
395xfs_bmap_disk_count_leaves( 395xfs_bmap_disk_count_leaves(
396 struct xfs_mount *mp, 396 struct xfs_mount *mp,
397 xfs_bmbt_block_t *block, 397 struct xfs_btree_block *block,
398 int numrecs, 398 int numrecs,
399 int *count); 399 int *count);
400 400
@@ -3042,14 +3042,14 @@ xfs_bmap_btree_to_extents(
3042 int whichfork) /* data or attr fork */ 3042 int whichfork) /* data or attr fork */
3043{ 3043{
3044 /* REFERENCED */ 3044 /* REFERENCED */
3045 xfs_bmbt_block_t *cblock;/* child btree block */ 3045 struct xfs_btree_block *cblock;/* child btree block */
3046 xfs_fsblock_t cbno; /* child block number */ 3046 xfs_fsblock_t cbno; /* child block number */
3047 xfs_buf_t *cbp; /* child block's buffer */ 3047 xfs_buf_t *cbp; /* child block's buffer */
3048 int error; /* error return value */ 3048 int error; /* error return value */
3049 xfs_ifork_t *ifp; /* inode fork data */ 3049 xfs_ifork_t *ifp; /* inode fork data */
3050 xfs_mount_t *mp; /* mount point structure */ 3050 xfs_mount_t *mp; /* mount point structure */
3051 __be64 *pp; /* ptr to block address */ 3051 __be64 *pp; /* ptr to block address */
3052 xfs_bmbt_block_t *rblock;/* root btree block */ 3052 struct xfs_btree_block *rblock;/* root btree block */
3053 3053
3054 mp = ip->i_mount; 3054 mp = ip->i_mount;
3055 ifp = XFS_IFORK_PTR(ip, whichfork); 3055 ifp = XFS_IFORK_PTR(ip, whichfork);
@@ -3069,8 +3069,8 @@ xfs_bmap_btree_to_extents(
3069 if ((error = xfs_btree_read_bufl(mp, tp, cbno, 0, &cbp, 3069 if ((error = xfs_btree_read_bufl(mp, tp, cbno, 0, &cbp,
3070 XFS_BMAP_BTREE_REF))) 3070 XFS_BMAP_BTREE_REF)))
3071 return error; 3071 return error;
3072 cblock = XFS_BUF_TO_BMBT_BLOCK(cbp); 3072 cblock = XFS_BUF_TO_BLOCK(cbp);
3073 if ((error = xfs_btree_check_lblock(cur, cblock, 0, cbp))) 3073 if ((error = xfs_btree_check_block(cur, cblock, 0, cbp)))
3074 return error; 3074 return error;
3075 xfs_bmap_add_free(cbno, 1, cur->bc_private.b.flist, mp); 3075 xfs_bmap_add_free(cbno, 1, cur->bc_private.b.flist, mp);
3076 ip->i_d.di_nblocks--; 3076 ip->i_d.di_nblocks--;
@@ -3450,11 +3450,11 @@ xfs_bmap_extents_to_btree(
3450 int *logflagsp, /* inode logging flags */ 3450 int *logflagsp, /* inode logging flags */
3451 int whichfork) /* data or attr fork */ 3451 int whichfork) /* data or attr fork */
3452{ 3452{
3453 xfs_bmbt_block_t *ablock; /* allocated (child) bt block */ 3453 struct xfs_btree_block *ablock; /* allocated (child) bt block */
3454 xfs_buf_t *abp; /* buffer for ablock */ 3454 xfs_buf_t *abp; /* buffer for ablock */
3455 xfs_alloc_arg_t args; /* allocation arguments */ 3455 xfs_alloc_arg_t args; /* allocation arguments */
3456 xfs_bmbt_rec_t *arp; /* child record pointer */ 3456 xfs_bmbt_rec_t *arp; /* child record pointer */
3457 xfs_bmbt_block_t *block; /* btree root block */ 3457 struct xfs_btree_block *block; /* btree root block */
3458 xfs_btree_cur_t *cur; /* bmap btree cursor */ 3458 xfs_btree_cur_t *cur; /* bmap btree cursor */
3459 xfs_bmbt_rec_host_t *ep; /* extent record pointer */ 3459 xfs_bmbt_rec_host_t *ep; /* extent record pointer */
3460 int error; /* error return value */ 3460 int error; /* error return value */
@@ -3474,6 +3474,7 @@ xfs_bmap_extents_to_btree(
3474 */ 3474 */
3475 xfs_iroot_realloc(ip, 1, whichfork); 3475 xfs_iroot_realloc(ip, 1, whichfork);
3476 ifp->if_flags |= XFS_IFBROOT; 3476 ifp->if_flags |= XFS_IFBROOT;
3477
3477 /* 3478 /*
3478 * Fill in the root. 3479 * Fill in the root.
3479 */ 3480 */
@@ -3481,8 +3482,9 @@ xfs_bmap_extents_to_btree(
3481 block->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC); 3482 block->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC);
3482 block->bb_level = cpu_to_be16(1); 3483 block->bb_level = cpu_to_be16(1);
3483 block->bb_numrecs = cpu_to_be16(1); 3484 block->bb_numrecs = cpu_to_be16(1);
3484 block->bb_leftsib = cpu_to_be64(NULLDFSBNO); 3485 block->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO);
3485 block->bb_rightsib = cpu_to_be64(NULLDFSBNO); 3486 block->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO);
3487
3486 /* 3488 /*
3487 * Need a cursor. Can't allocate until bb_level is filled in. 3489 * Need a cursor. Can't allocate until bb_level is filled in.
3488 */ 3490 */
@@ -3534,11 +3536,11 @@ xfs_bmap_extents_to_btree(
3534 /* 3536 /*
3535 * Fill in the child block. 3537 * Fill in the child block.
3536 */ 3538 */
3537 ablock = XFS_BUF_TO_BMBT_BLOCK(abp); 3539 ablock = XFS_BUF_TO_BLOCK(abp);
3538 ablock->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC); 3540 ablock->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC);
3539 ablock->bb_level = 0; 3541 ablock->bb_level = 0;
3540 ablock->bb_leftsib = cpu_to_be64(NULLDFSBNO); 3542 ablock->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO);
3541 ablock->bb_rightsib = cpu_to_be64(NULLDFSBNO); 3543 ablock->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO);
3542 arp = XFS_BMBT_REC_ADDR(mp, ablock, 1); 3544 arp = XFS_BMBT_REC_ADDR(mp, ablock, 1);
3543 nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); 3545 nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
3544 for (cnt = i = 0; i < nextents; i++) { 3546 for (cnt = i = 0; i < nextents; i++) {
@@ -3550,7 +3552,8 @@ xfs_bmap_extents_to_btree(
3550 } 3552 }
3551 } 3553 }
3552 ASSERT(cnt == XFS_IFORK_NEXTENTS(ip, whichfork)); 3554 ASSERT(cnt == XFS_IFORK_NEXTENTS(ip, whichfork));
3553 ablock->bb_numrecs = cpu_to_be16(cnt); 3555 xfs_btree_set_numrecs(ablock, cnt);
3556
3554 /* 3557 /*
3555 * Fill in the root key and pointer. 3558 * Fill in the root key and pointer.
3556 */ 3559 */
@@ -4533,7 +4536,7 @@ xfs_bmap_read_extents(
4533 xfs_inode_t *ip, /* incore inode */ 4536 xfs_inode_t *ip, /* incore inode */
4534 int whichfork) /* data or attr fork */ 4537 int whichfork) /* data or attr fork */
4535{ 4538{
4536 xfs_bmbt_block_t *block; /* current btree block */ 4539 struct xfs_btree_block *block; /* current btree block */
4537 xfs_fsblock_t bno; /* block # of "block" */ 4540 xfs_fsblock_t bno; /* block # of "block" */
4538 xfs_buf_t *bp; /* buffer for "block" */ 4541 xfs_buf_t *bp; /* buffer for "block" */
4539 int error; /* error return value */ 4542 int error; /* error return value */
@@ -4570,7 +4573,7 @@ xfs_bmap_read_extents(
4570 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp, 4573 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp,
4571 XFS_BMAP_BTREE_REF))) 4574 XFS_BMAP_BTREE_REF)))
4572 return error; 4575 return error;
4573 block = XFS_BUF_TO_BMBT_BLOCK(bp); 4576 block = XFS_BUF_TO_BLOCK(bp);
4574 XFS_WANT_CORRUPTED_GOTO( 4577 XFS_WANT_CORRUPTED_GOTO(
4575 XFS_BMAP_SANITY_CHECK(mp, block, level), 4578 XFS_BMAP_SANITY_CHECK(mp, block, level),
4576 error0); 4579 error0);
@@ -4596,7 +4599,7 @@ xfs_bmap_read_extents(
4596 xfs_extnum_t start; 4599 xfs_extnum_t start;
4597 4600
4598 4601
4599 num_recs = be16_to_cpu(block->bb_numrecs); 4602 num_recs = xfs_btree_get_numrecs(block);
4600 if (unlikely(i + num_recs > room)) { 4603 if (unlikely(i + num_recs > room)) {
4601 ASSERT(i + num_recs <= room); 4604 ASSERT(i + num_recs <= room);
4602 xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, 4605 xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
@@ -4613,7 +4616,7 @@ xfs_bmap_read_extents(
4613 /* 4616 /*
4614 * Read-ahead the next leaf block, if any. 4617 * Read-ahead the next leaf block, if any.
4615 */ 4618 */
4616 nextbno = be64_to_cpu(block->bb_rightsib); 4619 nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
4617 if (nextbno != NULLFSBLOCK) 4620 if (nextbno != NULLFSBLOCK)
4618 xfs_btree_reada_bufl(mp, nextbno, 1); 4621 xfs_btree_reada_bufl(mp, nextbno, 1);
4619 /* 4622 /*
@@ -4650,7 +4653,7 @@ xfs_bmap_read_extents(
4650 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp, 4653 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp,
4651 XFS_BMAP_BTREE_REF))) 4654 XFS_BMAP_BTREE_REF)))
4652 return error; 4655 return error;
4653 block = XFS_BUF_TO_BMBT_BLOCK(bp); 4656 block = XFS_BUF_TO_BLOCK(bp);
4654 } 4657 }
4655 ASSERT(i == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))); 4658 ASSERT(i == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)));
4656 ASSERT(i == XFS_IFORK_NEXTENTS(ip, whichfork)); 4659 ASSERT(i == XFS_IFORK_NEXTENTS(ip, whichfork));
@@ -6175,7 +6178,7 @@ xfs_bmap_get_bp(
6175 6178
6176void 6179void
6177xfs_check_block( 6180xfs_check_block(
6178 xfs_bmbt_block_t *block, 6181 struct xfs_btree_block *block,
6179 xfs_mount_t *mp, 6182 xfs_mount_t *mp,
6180 int root, 6183 int root,
6181 short sz) 6184 short sz)
@@ -6187,7 +6190,7 @@ xfs_check_block(
6187 ASSERT(be16_to_cpu(block->bb_level) > 0); 6190 ASSERT(be16_to_cpu(block->bb_level) > 0);
6188 6191
6189 prevp = NULL; 6192 prevp = NULL;
6190 for( i = 1; i <= be16_to_cpu(block->bb_numrecs); i++) { 6193 for( i = 1; i <= xfs_btree_get_numrecs(block); i++) {
6191 dmxr = mp->m_bmap_dmxr[0]; 6194 dmxr = mp->m_bmap_dmxr[0];
6192 keyp = XFS_BMBT_KEY_ADDR(mp, block, i); 6195 keyp = XFS_BMBT_KEY_ADDR(mp, block, i);
6193 6196
@@ -6232,7 +6235,7 @@ xfs_bmap_check_leaf_extents(
6232 xfs_inode_t *ip, /* incore inode pointer */ 6235 xfs_inode_t *ip, /* incore inode pointer */
6233 int whichfork) /* data or attr fork */ 6236 int whichfork) /* data or attr fork */
6234{ 6237{
6235 xfs_bmbt_block_t *block; /* current btree block */ 6238 struct xfs_btree_block *block; /* current btree block */
6236 xfs_fsblock_t bno; /* block # of "block" */ 6239 xfs_fsblock_t bno; /* block # of "block" */
6237 xfs_buf_t *bp; /* buffer for "block" */ 6240 xfs_buf_t *bp; /* buffer for "block" */
6238 int error; /* error return value */ 6241 int error; /* error return value */
@@ -6282,7 +6285,7 @@ xfs_bmap_check_leaf_extents(
6282 if (!bp && (error = xfs_btree_read_bufl(mp, NULL, bno, 0, &bp, 6285 if (!bp && (error = xfs_btree_read_bufl(mp, NULL, bno, 0, &bp,
6283 XFS_BMAP_BTREE_REF))) 6286 XFS_BMAP_BTREE_REF)))
6284 goto error_norelse; 6287 goto error_norelse;
6285 block = XFS_BUF_TO_BMBT_BLOCK(bp); 6288 block = XFS_BUF_TO_BLOCK(bp);
6286 XFS_WANT_CORRUPTED_GOTO( 6289 XFS_WANT_CORRUPTED_GOTO(
6287 XFS_BMAP_SANITY_CHECK(mp, block, level), 6290 XFS_BMAP_SANITY_CHECK(mp, block, level),
6288 error0); 6291 error0);
@@ -6317,13 +6320,13 @@ xfs_bmap_check_leaf_extents(
6317 xfs_extnum_t num_recs; 6320 xfs_extnum_t num_recs;
6318 6321
6319 6322
6320 num_recs = be16_to_cpu(block->bb_numrecs); 6323 num_recs = xfs_btree_get_numrecs(block);
6321 6324
6322 /* 6325 /*
6323 * Read-ahead the next leaf block, if any. 6326 * Read-ahead the next leaf block, if any.
6324 */ 6327 */
6325 6328
6326 nextbno = be64_to_cpu(block->bb_rightsib); 6329 nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
6327 6330
6328 /* 6331 /*
6329 * Check all the extents to make sure they are OK. 6332 * Check all the extents to make sure they are OK.
@@ -6367,7 +6370,7 @@ xfs_bmap_check_leaf_extents(
6367 if (!bp && (error = xfs_btree_read_bufl(mp, NULL, bno, 0, &bp, 6370 if (!bp && (error = xfs_btree_read_bufl(mp, NULL, bno, 0, &bp,
6368 XFS_BMAP_BTREE_REF))) 6371 XFS_BMAP_BTREE_REF)))
6369 goto error_norelse; 6372 goto error_norelse;
6370 block = XFS_BUF_TO_BMBT_BLOCK(bp); 6373 block = XFS_BUF_TO_BLOCK(bp);
6371 } 6374 }
6372 if (bp_release) { 6375 if (bp_release) {
6373 bp_release = 0; 6376 bp_release = 0;
@@ -6397,7 +6400,7 @@ xfs_bmap_count_blocks(
6397 int whichfork, /* data or attr fork */ 6400 int whichfork, /* data or attr fork */
6398 int *count) /* out: count of blocks */ 6401 int *count) /* out: count of blocks */
6399{ 6402{
6400 xfs_bmbt_block_t *block; /* current btree block */ 6403 struct xfs_btree_block *block; /* current btree block */
6401 xfs_fsblock_t bno; /* block # of "block" */ 6404 xfs_fsblock_t bno; /* block # of "block" */
6402 xfs_ifork_t *ifp; /* fork structure */ 6405 xfs_ifork_t *ifp; /* fork structure */
6403 int level; /* btree level, for checking */ 6406 int level; /* btree level, for checking */
@@ -6454,24 +6457,24 @@ xfs_bmap_count_tree(
6454 __be64 *pp; 6457 __be64 *pp;
6455 xfs_fsblock_t bno = blockno; 6458 xfs_fsblock_t bno = blockno;
6456 xfs_fsblock_t nextbno; 6459 xfs_fsblock_t nextbno;
6457 xfs_bmbt_block_t *block, *nextblock; 6460 struct xfs_btree_block *block, *nextblock;
6458 int numrecs; 6461 int numrecs;
6459 6462
6460 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp, XFS_BMAP_BTREE_REF))) 6463 if ((error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp, XFS_BMAP_BTREE_REF)))
6461 return error; 6464 return error;
6462 *count += 1; 6465 *count += 1;
6463 block = XFS_BUF_TO_BMBT_BLOCK(bp); 6466 block = XFS_BUF_TO_BLOCK(bp);
6464 6467
6465 if (--level) { 6468 if (--level) {
6466 /* Not at node above leafs, count this level of nodes */ 6469 /* Not at node above leafs, count this level of nodes */
6467 nextbno = be64_to_cpu(block->bb_rightsib); 6470 nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
6468 while (nextbno != NULLFSBLOCK) { 6471 while (nextbno != NULLFSBLOCK) {
6469 if ((error = xfs_btree_read_bufl(mp, tp, nextbno, 6472 if ((error = xfs_btree_read_bufl(mp, tp, nextbno,
6470 0, &nbp, XFS_BMAP_BTREE_REF))) 6473 0, &nbp, XFS_BMAP_BTREE_REF)))
6471 return error; 6474 return error;
6472 *count += 1; 6475 *count += 1;
6473 nextblock = XFS_BUF_TO_BMBT_BLOCK(nbp); 6476 nextblock = XFS_BUF_TO_BLOCK(nbp);
6474 nextbno = be64_to_cpu(nextblock->bb_rightsib); 6477 nextbno = be64_to_cpu(nextblock->bb_u.l.bb_rightsib);
6475 xfs_trans_brelse(tp, nbp); 6478 xfs_trans_brelse(tp, nbp);
6476 } 6479 }
6477 6480
@@ -6489,7 +6492,7 @@ xfs_bmap_count_tree(
6489 } else { 6492 } else {
6490 /* count all level 1 nodes and their leaves */ 6493 /* count all level 1 nodes and their leaves */
6491 for (;;) { 6494 for (;;) {
6492 nextbno = be64_to_cpu(block->bb_rightsib); 6495 nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
6493 numrecs = be16_to_cpu(block->bb_numrecs); 6496 numrecs = be16_to_cpu(block->bb_numrecs);
6494 xfs_bmap_disk_count_leaves(mp, block, numrecs, count); 6497 xfs_bmap_disk_count_leaves(mp, block, numrecs, count);
6495 xfs_trans_brelse(tp, bp); 6498 xfs_trans_brelse(tp, bp);
@@ -6500,7 +6503,7 @@ xfs_bmap_count_tree(
6500 XFS_BMAP_BTREE_REF))) 6503 XFS_BMAP_BTREE_REF)))
6501 return error; 6504 return error;
6502 *count += 1; 6505 *count += 1;
6503 block = XFS_BUF_TO_BMBT_BLOCK(bp); 6506 block = XFS_BUF_TO_BLOCK(bp);
6504 } 6507 }
6505 } 6508 }
6506 return 0; 6509 return 0;
@@ -6531,7 +6534,7 @@ xfs_bmap_count_leaves(
6531STATIC void 6534STATIC void
6532xfs_bmap_disk_count_leaves( 6535xfs_bmap_disk_count_leaves(
6533 struct xfs_mount *mp, 6536 struct xfs_mount *mp,
6534 xfs_bmbt_block_t *block, 6537 struct xfs_btree_block *block,
6535 int numrecs, 6538 int numrecs,
6536 int *count) 6539 int *count)
6537{ 6540{
diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c
index 11137c042c94..e46e02b8e277 100644
--- a/fs/xfs/xfs_bmap_btree.c
+++ b/fs/xfs/xfs_bmap_btree.c
@@ -68,7 +68,7 @@ xfs_bmdr_to_bmbt(
68 struct xfs_mount *mp, 68 struct xfs_mount *mp,
69 xfs_bmdr_block_t *dblock, 69 xfs_bmdr_block_t *dblock,
70 int dblocklen, 70 int dblocklen,
71 xfs_bmbt_block_t *rblock, 71 struct xfs_btree_block *rblock,
72 int rblocklen) 72 int rblocklen)
73{ 73{
74 int dmxr; 74 int dmxr;
@@ -81,8 +81,8 @@ xfs_bmdr_to_bmbt(
81 rblock->bb_level = dblock->bb_level; 81 rblock->bb_level = dblock->bb_level;
82 ASSERT(be16_to_cpu(rblock->bb_level) > 0); 82 ASSERT(be16_to_cpu(rblock->bb_level) > 0);
83 rblock->bb_numrecs = dblock->bb_numrecs; 83 rblock->bb_numrecs = dblock->bb_numrecs;
84 rblock->bb_leftsib = cpu_to_be64(NULLDFSBNO); 84 rblock->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO);
85 rblock->bb_rightsib = cpu_to_be64(NULLDFSBNO); 85 rblock->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO);
86 dmxr = xfs_bmdr_maxrecs(mp, dblocklen, 0); 86 dmxr = xfs_bmdr_maxrecs(mp, dblocklen, 0);
87 fkp = XFS_BMDR_KEY_ADDR(dblock, 1); 87 fkp = XFS_BMDR_KEY_ADDR(dblock, 1);
88 tkp = XFS_BMBT_KEY_ADDR(mp, rblock, 1); 88 tkp = XFS_BMBT_KEY_ADDR(mp, rblock, 1);
@@ -429,7 +429,7 @@ xfs_bmbt_set_state(
429void 429void
430xfs_bmbt_to_bmdr( 430xfs_bmbt_to_bmdr(
431 struct xfs_mount *mp, 431 struct xfs_mount *mp,
432 xfs_bmbt_block_t *rblock, 432 struct xfs_btree_block *rblock,
433 int rblocklen, 433 int rblocklen,
434 xfs_bmdr_block_t *dblock, 434 xfs_bmdr_block_t *dblock,
435 int dblocklen) 435 int dblocklen)
@@ -441,8 +441,8 @@ xfs_bmbt_to_bmdr(
441 __be64 *tpp; 441 __be64 *tpp;
442 442
443 ASSERT(be32_to_cpu(rblock->bb_magic) == XFS_BMAP_MAGIC); 443 ASSERT(be32_to_cpu(rblock->bb_magic) == XFS_BMAP_MAGIC);
444 ASSERT(be64_to_cpu(rblock->bb_leftsib) == NULLDFSBNO); 444 ASSERT(be64_to_cpu(rblock->bb_u.l.bb_leftsib) == NULLDFSBNO);
445 ASSERT(be64_to_cpu(rblock->bb_rightsib) == NULLDFSBNO); 445 ASSERT(be64_to_cpu(rblock->bb_u.l.bb_rightsib) == NULLDFSBNO);
446 ASSERT(be16_to_cpu(rblock->bb_level) > 0); 446 ASSERT(be16_to_cpu(rblock->bb_level) > 0);
447 dblock->bb_level = rblock->bb_level; 447 dblock->bb_level = rblock->bb_level;
448 dblock->bb_numrecs = rblock->bb_numrecs; 448 dblock->bb_numrecs = rblock->bb_numrecs;
@@ -906,7 +906,7 @@ xfs_bmbt_maxrecs(
906 int blocklen, 906 int blocklen,
907 int leaf) 907 int leaf)
908{ 908{
909 blocklen -= sizeof(struct xfs_btree_lblock); 909 blocklen -= XFS_BMBT_BLOCK_LEN(mp);
910 910
911 if (leaf) 911 if (leaf)
912 return blocklen / sizeof(xfs_bmbt_rec_t); 912 return blocklen / sizeof(xfs_bmbt_rec_t);
diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h
index 7f001072db47..735a42418c99 100644
--- a/fs/xfs/xfs_bmap_btree.h
+++ b/fs/xfs/xfs_bmap_btree.h
@@ -22,7 +22,6 @@
22 22
23struct xfs_btree_cur; 23struct xfs_btree_cur;
24struct xfs_btree_block; 24struct xfs_btree_block;
25struct xfs_btree_lblock;
26struct xfs_mount; 25struct xfs_mount;
27struct xfs_inode; 26struct xfs_inode;
28struct xfs_trans; 27struct xfs_trans;
@@ -147,27 +146,29 @@ typedef struct xfs_bmbt_key {
147/* btree pointer type */ 146/* btree pointer type */
148typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; 147typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;
149 148
150/* btree block header type */ 149/*
151typedef struct xfs_btree_lblock xfs_bmbt_block_t; 150 * Btree block header size depends on a superblock flag.
152 151 *
153#define XFS_BUF_TO_BMBT_BLOCK(bp) ((xfs_bmbt_block_t *)XFS_BUF_PTR(bp)) 152 * (not quite yet, but soon)
153 */
154#define XFS_BMBT_BLOCK_LEN(mp) XFS_BTREE_LBLOCK_LEN
154 155
155#define XFS_BMBT_REC_ADDR(mp, block, index) \ 156#define XFS_BMBT_REC_ADDR(mp, block, index) \
156 ((xfs_bmbt_rec_t *) \ 157 ((xfs_bmbt_rec_t *) \
157 ((char *)(block) + \ 158 ((char *)(block) + \
158 sizeof(struct xfs_btree_lblock) + \ 159 XFS_BMBT_BLOCK_LEN(mp) + \
159 ((index) - 1) * sizeof(xfs_bmbt_rec_t))) 160 ((index) - 1) * sizeof(xfs_bmbt_rec_t)))
160 161
161#define XFS_BMBT_KEY_ADDR(mp, block, index) \ 162#define XFS_BMBT_KEY_ADDR(mp, block, index) \
162 ((xfs_bmbt_key_t *) \ 163 ((xfs_bmbt_key_t *) \
163 ((char *)(block) + \ 164 ((char *)(block) + \
164 sizeof(struct xfs_btree_lblock) + \ 165 XFS_BMBT_BLOCK_LEN(mp) + \
165 ((index) - 1) * sizeof(xfs_bmbt_key_t))) 166 ((index) - 1) * sizeof(xfs_bmbt_key_t)))
166 167
167#define XFS_BMBT_PTR_ADDR(mp, block, index, maxrecs) \ 168#define XFS_BMBT_PTR_ADDR(mp, block, index, maxrecs) \
168 ((xfs_bmbt_ptr_t *) \ 169 ((xfs_bmbt_ptr_t *) \
169 ((char *)(block) + \ 170 ((char *)(block) + \
170 sizeof(struct xfs_btree_lblock) + \ 171 XFS_BMBT_BLOCK_LEN(mp) + \
171 (maxrecs) * sizeof(xfs_bmbt_key_t) + \ 172 (maxrecs) * sizeof(xfs_bmbt_key_t) + \
172 ((index) - 1) * sizeof(xfs_bmbt_ptr_t))) 173 ((index) - 1) * sizeof(xfs_bmbt_ptr_t)))
173 174
@@ -198,7 +199,7 @@ typedef struct xfs_btree_lblock xfs_bmbt_block_t;
198 XFS_BMBT_PTR_ADDR(mp, bb, i, xfs_bmbt_maxrecs(mp, sz, 0)) 199 XFS_BMBT_PTR_ADDR(mp, bb, i, xfs_bmbt_maxrecs(mp, sz, 0))
199 200
200#define XFS_BMAP_BROOT_SPACE_CALC(nrecs) \ 201#define XFS_BMAP_BROOT_SPACE_CALC(nrecs) \
201 (int)(sizeof(xfs_bmbt_block_t) + \ 202 (int)(XFS_BTREE_LBLOCK_LEN + \
202 ((nrecs) * (sizeof(xfs_bmbt_key_t) + sizeof(xfs_bmbt_ptr_t)))) 203 ((nrecs) * (sizeof(xfs_bmbt_key_t) + sizeof(xfs_bmbt_ptr_t))))
203 204
204#define XFS_BMAP_BROOT_SPACE(bb) \ 205#define XFS_BMAP_BROOT_SPACE(bb) \
@@ -223,7 +224,7 @@ typedef struct xfs_btree_lblock xfs_bmbt_block_t;
223 * Prototypes for xfs_bmap.c to call. 224 * Prototypes for xfs_bmap.c to call.
224 */ 225 */
225extern void xfs_bmdr_to_bmbt(struct xfs_mount *, xfs_bmdr_block_t *, int, 226extern void xfs_bmdr_to_bmbt(struct xfs_mount *, xfs_bmdr_block_t *, int,
226 xfs_bmbt_block_t *, int); 227 struct xfs_btree_block *, int);
227extern void xfs_bmbt_get_all(xfs_bmbt_rec_host_t *r, xfs_bmbt_irec_t *s); 228extern void xfs_bmbt_get_all(xfs_bmbt_rec_host_t *r, xfs_bmbt_irec_t *s);
228extern xfs_filblks_t xfs_bmbt_get_blockcount(xfs_bmbt_rec_host_t *r); 229extern xfs_filblks_t xfs_bmbt_get_blockcount(xfs_bmbt_rec_host_t *r);
229extern xfs_fsblock_t xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r); 230extern xfs_fsblock_t xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r);
@@ -246,7 +247,7 @@ extern void xfs_bmbt_disk_set_all(xfs_bmbt_rec_t *r, xfs_bmbt_irec_t *s);
246extern void xfs_bmbt_disk_set_allf(xfs_bmbt_rec_t *r, xfs_fileoff_t o, 247extern void xfs_bmbt_disk_set_allf(xfs_bmbt_rec_t *r, xfs_fileoff_t o,
247 xfs_fsblock_t b, xfs_filblks_t c, xfs_exntst_t v); 248 xfs_fsblock_t b, xfs_filblks_t c, xfs_exntst_t v);
248 249
249extern void xfs_bmbt_to_bmdr(struct xfs_mount *, xfs_bmbt_block_t *, int, 250extern void xfs_bmbt_to_bmdr(struct xfs_mount *, struct xfs_btree_block *, int,
250 xfs_bmdr_block_t *, int); 251 xfs_bmdr_block_t *, int);
251 252
252extern int xfs_bmbt_get_maxrecs(struct xfs_btree_cur *, int level); 253extern int xfs_bmbt_get_maxrecs(struct xfs_btree_cur *, int level);
diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c
index 72a26bb76430..7ed59267420d 100644
--- a/fs/xfs/xfs_btree.c
+++ b/fs/xfs/xfs_btree.c
@@ -53,10 +53,10 @@ const __uint32_t xfs_magics[XFS_BTNUM_MAX] = {
53}; 53};
54 54
55 55
56int /* error (0 or EFSCORRUPTED) */ 56STATIC int /* error (0 or EFSCORRUPTED) */
57xfs_btree_check_lblock( 57xfs_btree_check_lblock(
58 struct xfs_btree_cur *cur, /* btree cursor */ 58 struct xfs_btree_cur *cur, /* btree cursor */
59 struct xfs_btree_lblock *block, /* btree long form block pointer */ 59 struct xfs_btree_block *block, /* btree long form block pointer */
60 int level, /* level of the btree block */ 60 int level, /* level of the btree block */
61 struct xfs_buf *bp) /* buffer for block, if any */ 61 struct xfs_buf *bp) /* buffer for block, if any */
62{ 62{
@@ -69,12 +69,14 @@ xfs_btree_check_lblock(
69 be16_to_cpu(block->bb_level) == level && 69 be16_to_cpu(block->bb_level) == level &&
70 be16_to_cpu(block->bb_numrecs) <= 70 be16_to_cpu(block->bb_numrecs) <=
71 cur->bc_ops->get_maxrecs(cur, level) && 71 cur->bc_ops->get_maxrecs(cur, level) &&
72 block->bb_leftsib && 72 block->bb_u.l.bb_leftsib &&
73 (be64_to_cpu(block->bb_leftsib) == NULLDFSBNO || 73 (be64_to_cpu(block->bb_u.l.bb_leftsib) == NULLDFSBNO ||
74 XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_leftsib))) && 74 XFS_FSB_SANITY_CHECK(mp,
75 block->bb_rightsib && 75 be64_to_cpu(block->bb_u.l.bb_leftsib))) &&
76 (be64_to_cpu(block->bb_rightsib) == NULLDFSBNO || 76 block->bb_u.l.bb_rightsib &&
77 XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_rightsib))); 77 (be64_to_cpu(block->bb_u.l.bb_rightsib) == NULLDFSBNO ||
78 XFS_FSB_SANITY_CHECK(mp,
79 be64_to_cpu(block->bb_u.l.bb_rightsib)));
78 if (unlikely(XFS_TEST_ERROR(!lblock_ok, mp, 80 if (unlikely(XFS_TEST_ERROR(!lblock_ok, mp,
79 XFS_ERRTAG_BTREE_CHECK_LBLOCK, 81 XFS_ERRTAG_BTREE_CHECK_LBLOCK,
80 XFS_RANDOM_BTREE_CHECK_LBLOCK))) { 82 XFS_RANDOM_BTREE_CHECK_LBLOCK))) {
@@ -90,7 +92,7 @@ xfs_btree_check_lblock(
90STATIC int /* error (0 or EFSCORRUPTED) */ 92STATIC int /* error (0 or EFSCORRUPTED) */
91xfs_btree_check_sblock( 93xfs_btree_check_sblock(
92 struct xfs_btree_cur *cur, /* btree cursor */ 94 struct xfs_btree_cur *cur, /* btree cursor */
93 struct xfs_btree_sblock *block, /* btree short form block pointer */ 95 struct xfs_btree_block *block, /* btree short form block pointer */
94 int level, /* level of the btree block */ 96 int level, /* level of the btree block */
95 struct xfs_buf *bp) /* buffer containing block */ 97 struct xfs_buf *bp) /* buffer containing block */
96{ 98{
@@ -107,12 +109,12 @@ xfs_btree_check_sblock(
107 be16_to_cpu(block->bb_level) == level && 109 be16_to_cpu(block->bb_level) == level &&
108 be16_to_cpu(block->bb_numrecs) <= 110 be16_to_cpu(block->bb_numrecs) <=
109 cur->bc_ops->get_maxrecs(cur, level) && 111 cur->bc_ops->get_maxrecs(cur, level) &&
110 (be32_to_cpu(block->bb_leftsib) == NULLAGBLOCK || 112 (be32_to_cpu(block->bb_u.s.bb_leftsib) == NULLAGBLOCK ||
111 be32_to_cpu(block->bb_leftsib) < agflen) && 113 be32_to_cpu(block->bb_u.s.bb_leftsib) < agflen) &&
112 block->bb_leftsib && 114 block->bb_u.s.bb_leftsib &&
113 (be32_to_cpu(block->bb_rightsib) == NULLAGBLOCK || 115 (be32_to_cpu(block->bb_u.s.bb_rightsib) == NULLAGBLOCK ||
114 be32_to_cpu(block->bb_rightsib) < agflen) && 116 be32_to_cpu(block->bb_u.s.bb_rightsib) < agflen) &&
115 block->bb_rightsib; 117 block->bb_u.s.bb_rightsib;
116 if (unlikely(XFS_TEST_ERROR(!sblock_ok, cur->bc_mp, 118 if (unlikely(XFS_TEST_ERROR(!sblock_ok, cur->bc_mp,
117 XFS_ERRTAG_BTREE_CHECK_SBLOCK, 119 XFS_ERRTAG_BTREE_CHECK_SBLOCK,
118 XFS_RANDOM_BTREE_CHECK_SBLOCK))) { 120 XFS_RANDOM_BTREE_CHECK_SBLOCK))) {
@@ -135,13 +137,10 @@ xfs_btree_check_block(
135 int level, /* level of the btree block */ 137 int level, /* level of the btree block */
136 struct xfs_buf *bp) /* buffer containing block, if any */ 138 struct xfs_buf *bp) /* buffer containing block, if any */
137{ 139{
138 if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { 140 if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
139 return xfs_btree_check_lblock(cur, 141 return xfs_btree_check_lblock(cur, block, level, bp);
140 (struct xfs_btree_lblock *)block, level, bp); 142 else
141 } else { 143 return xfs_btree_check_sblock(cur, block, level, bp);
142 return xfs_btree_check_sblock(cur,
143 (struct xfs_btree_sblock *)block, level, bp);
144 }
145} 144}
146 145
147/* 146/*
@@ -326,8 +325,8 @@ xfs_btree_dup_cursor(
326static inline size_t xfs_btree_block_len(struct xfs_btree_cur *cur) 325static inline size_t xfs_btree_block_len(struct xfs_btree_cur *cur)
327{ 326{
328 return (cur->bc_flags & XFS_BTREE_LONG_PTRS) ? 327 return (cur->bc_flags & XFS_BTREE_LONG_PTRS) ?
329 sizeof(struct xfs_btree_lblock) : 328 XFS_BTREE_LBLOCK_LEN :
330 sizeof(struct xfs_btree_sblock); 329 XFS_BTREE_SBLOCK_LEN;
331} 330}
332 331
333/* 332/*
@@ -510,7 +509,7 @@ xfs_btree_islastblock(
510 xfs_btree_cur_t *cur, /* btree cursor */ 509 xfs_btree_cur_t *cur, /* btree cursor */
511 int level) /* level to check */ 510 int level) /* level to check */
512{ 511{
513 xfs_btree_block_t *block; /* generic btree block pointer */ 512 struct xfs_btree_block *block; /* generic btree block pointer */
514 xfs_buf_t *bp; /* buffer containing block */ 513 xfs_buf_t *bp; /* buffer containing block */
515 514
516 block = xfs_btree_get_block(cur, level, &bp); 515 block = xfs_btree_get_block(cur, level, &bp);
@@ -530,7 +529,7 @@ xfs_btree_firstrec(
530 xfs_btree_cur_t *cur, /* btree cursor */ 529 xfs_btree_cur_t *cur, /* btree cursor */
531 int level) /* level to change */ 530 int level) /* level to change */
532{ 531{
533 xfs_btree_block_t *block; /* generic btree block pointer */ 532 struct xfs_btree_block *block; /* generic btree block pointer */
534 xfs_buf_t *bp; /* buffer containing block */ 533 xfs_buf_t *bp; /* buffer containing block */
535 534
536 /* 535 /*
@@ -559,7 +558,7 @@ xfs_btree_lastrec(
559 xfs_btree_cur_t *cur, /* btree cursor */ 558 xfs_btree_cur_t *cur, /* btree cursor */
560 int level) /* level to change */ 559 int level) /* level to change */
561{ 560{
562 xfs_btree_block_t *block; /* generic btree block pointer */ 561 struct xfs_btree_block *block; /* generic btree block pointer */
563 xfs_buf_t *bp; /* buffer containing block */ 562 xfs_buf_t *bp; /* buffer containing block */
564 563
565 /* 564 /*
@@ -814,7 +813,7 @@ xfs_btree_setbuf(
814 int lev, /* level in btree */ 813 int lev, /* level in btree */
815 xfs_buf_t *bp) /* new buffer to set */ 814 xfs_buf_t *bp) /* new buffer to set */
816{ 815{
817 xfs_btree_block_t *b; /* btree block */ 816 struct xfs_btree_block *b; /* btree block */
818 xfs_buf_t *obp; /* old buffer pointer */ 817 xfs_buf_t *obp; /* old buffer pointer */
819 818
820 obp = cur->bc_bufs[lev]; 819 obp = cur->bc_bufs[lev];
@@ -1252,20 +1251,20 @@ xfs_btree_log_block(
1252 int first; /* first byte offset logged */ 1251 int first; /* first byte offset logged */
1253 int last; /* last byte offset logged */ 1252 int last; /* last byte offset logged */
1254 static const short soffsets[] = { /* table of offsets (short) */ 1253 static const short soffsets[] = { /* table of offsets (short) */
1255 offsetof(struct xfs_btree_sblock, bb_magic), 1254 offsetof(struct xfs_btree_block, bb_magic),
1256 offsetof(struct xfs_btree_sblock, bb_level), 1255 offsetof(struct xfs_btree_block, bb_level),
1257 offsetof(struct xfs_btree_sblock, bb_numrecs), 1256 offsetof(struct xfs_btree_block, bb_numrecs),
1258 offsetof(struct xfs_btree_sblock, bb_leftsib), 1257 offsetof(struct xfs_btree_block, bb_u.s.bb_leftsib),
1259 offsetof(struct xfs_btree_sblock, bb_rightsib), 1258 offsetof(struct xfs_btree_block, bb_u.s.bb_rightsib),
1260 sizeof(struct xfs_btree_sblock) 1259 XFS_BTREE_SBLOCK_LEN
1261 }; 1260 };
1262 static const short loffsets[] = { /* table of offsets (long) */ 1261 static const short loffsets[] = { /* table of offsets (long) */
1263 offsetof(struct xfs_btree_lblock, bb_magic), 1262 offsetof(struct xfs_btree_block, bb_magic),
1264 offsetof(struct xfs_btree_lblock, bb_level), 1263 offsetof(struct xfs_btree_block, bb_level),
1265 offsetof(struct xfs_btree_lblock, bb_numrecs), 1264 offsetof(struct xfs_btree_block, bb_numrecs),
1266 offsetof(struct xfs_btree_lblock, bb_leftsib), 1265 offsetof(struct xfs_btree_block, bb_u.l.bb_leftsib),
1267 offsetof(struct xfs_btree_lblock, bb_rightsib), 1266 offsetof(struct xfs_btree_block, bb_u.l.bb_rightsib),
1268 sizeof(struct xfs_btree_lblock) 1267 XFS_BTREE_LBLOCK_LEN
1269 }; 1268 };
1270 1269
1271 XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); 1270 XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY);
@@ -3018,7 +3017,7 @@ xfs_btree_kill_iroot(
3018 if (index) { 3017 if (index) {
3019 xfs_iroot_realloc(cur->bc_private.b.ip, index, 3018 xfs_iroot_realloc(cur->bc_private.b.ip, index,
3020 cur->bc_private.b.whichfork); 3019 cur->bc_private.b.whichfork);
3021 block = (struct xfs_btree_block *)ifp->if_broot; 3020 block = ifp->if_broot;
3022 } 3021 }
3023 3022
3024 be16_add_cpu(&block->bb_numrecs, index); 3023 be16_add_cpu(&block->bb_numrecs, index);
diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h
index d6120a749060..789fffdf8b2f 100644
--- a/fs/xfs/xfs_btree.h
+++ b/fs/xfs/xfs_btree.h
@@ -39,31 +39,16 @@ extern kmem_zone_t *xfs_btree_cur_zone;
39#define XFS_BTNUM_INO ((xfs_btnum_t)XFS_BTNUM_INOi) 39#define XFS_BTNUM_INO ((xfs_btnum_t)XFS_BTNUM_INOi)
40 40
41/* 41/*
42 * Short form header: space allocation btrees. 42 * Generic btree header.
43 */ 43 *
44typedef struct xfs_btree_sblock { 44 * This is a comination of the actual format used on disk for short and long
45 __be32 bb_magic; /* magic number for block type */ 45 * format btrees. The first three fields are shared by both format, but
46 __be16 bb_level; /* 0 is a leaf */ 46 * the pointers are different and should be used with care.
47 __be16 bb_numrecs; /* current # of data records */ 47 *
48 __be32 bb_leftsib; /* left sibling block or NULLAGBLOCK */ 48 * To get the size of the actual short or long form headers please use
49 __be32 bb_rightsib; /* right sibling block or NULLAGBLOCK */ 49 * the size macros below. Never use sizeof(xfs_btree_block).
50} xfs_btree_sblock_t;
51
52/*
53 * Long form header: bmap btrees.
54 */
55typedef struct xfs_btree_lblock {
56 __be32 bb_magic; /* magic number for block type */
57 __be16 bb_level; /* 0 is a leaf */
58 __be16 bb_numrecs; /* current # of data records */
59 __be64 bb_leftsib; /* left sibling block or NULLDFSBNO */
60 __be64 bb_rightsib; /* right sibling block or NULLDFSBNO */
61} xfs_btree_lblock_t;
62
63/*
64 * Combined header and structure, used by common code.
65 */ 50 */
66typedef struct xfs_btree_block { 51struct xfs_btree_block {
67 __be32 bb_magic; /* magic number for block type */ 52 __be32 bb_magic; /* magic number for block type */
68 __be16 bb_level; /* 0 is a leaf */ 53 __be16 bb_level; /* 0 is a leaf */
69 __be16 bb_numrecs; /* current # of data records */ 54 __be16 bb_numrecs; /* current # of data records */
@@ -77,7 +62,11 @@ typedef struct xfs_btree_block {
77 __be64 bb_rightsib; 62 __be64 bb_rightsib;
78 } l; /* long form pointers */ 63 } l; /* long form pointers */
79 } bb_u; /* rest */ 64 } bb_u; /* rest */
80} xfs_btree_block_t; 65};
66
67#define XFS_BTREE_SBLOCK_LEN 16 /* size of a short form block */
68#define XFS_BTREE_LBLOCK_LEN 24 /* size of a long form block */
69
81 70
82/* 71/*
83 * Generic key, ptr and record wrapper structures. 72 * Generic key, ptr and record wrapper structures.
@@ -294,20 +283,8 @@ typedef struct xfs_btree_cur
294/* 283/*
295 * Convert from buffer to btree block header. 284 * Convert from buffer to btree block header.
296 */ 285 */
297#define XFS_BUF_TO_BLOCK(bp) ((xfs_btree_block_t *)XFS_BUF_PTR(bp)) 286#define XFS_BUF_TO_BLOCK(bp) ((struct xfs_btree_block *)XFS_BUF_PTR(bp))
298#define XFS_BUF_TO_LBLOCK(bp) ((xfs_btree_lblock_t *)XFS_BUF_PTR(bp))
299#define XFS_BUF_TO_SBLOCK(bp) ((xfs_btree_sblock_t *)XFS_BUF_PTR(bp))
300
301 287
302/*
303 * Check that long form block header is ok.
304 */
305int /* error (0 or EFSCORRUPTED) */
306xfs_btree_check_lblock(
307 struct xfs_btree_cur *cur, /* btree cursor */
308 struct xfs_btree_lblock *block, /* btree long form block pointer */
309 int level, /* level of the btree block */
310 struct xfs_buf *bp); /* buffer containing block, if any */
311 288
312/* 289/*
313 * Check that block header is ok. 290 * Check that block header is ok.
diff --git a/fs/xfs/xfs_dinode.h b/fs/xfs/xfs_dinode.h
index 2a00fcc36d8e..d7cf392cc852 100644
--- a/fs/xfs/xfs_dinode.h
+++ b/fs/xfs/xfs_dinode.h
@@ -165,7 +165,7 @@ typedef enum xfs_dinode_fmt
165 */ 165 */
166#define XFS_LITINO(mp) ((mp)->m_litino) 166#define XFS_LITINO(mp) ((mp)->m_litino)
167#define XFS_BROOT_SIZE_ADJ \ 167#define XFS_BROOT_SIZE_ADJ \
168 (sizeof(xfs_bmbt_block_t) - sizeof(xfs_bmdr_block_t)) 168 (XFS_BTREE_LBLOCK_LEN - sizeof(xfs_bmdr_block_t))
169 169
170/* 170/*
171 * Inode data & attribute fork sizes, per inode. 171 * Inode data & attribute fork sizes, per inode.
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
index 8ce72aba027f..f1d0585041b9 100644
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -126,7 +126,7 @@ xfs_growfs_data_private(
126 xfs_extlen_t agsize; 126 xfs_extlen_t agsize;
127 xfs_extlen_t tmpsize; 127 xfs_extlen_t tmpsize;
128 xfs_alloc_rec_t *arec; 128 xfs_alloc_rec_t *arec;
129 xfs_btree_sblock_t *block; 129 struct xfs_btree_block *block;
130 xfs_buf_t *bp; 130 xfs_buf_t *bp;
131 int bucket; 131 int bucket;
132 int dpct; 132 int dpct;
@@ -251,13 +251,13 @@ xfs_growfs_data_private(
251 bp = xfs_buf_get(mp->m_ddev_targp, 251 bp = xfs_buf_get(mp->m_ddev_targp,
252 XFS_AGB_TO_DADDR(mp, agno, XFS_BNO_BLOCK(mp)), 252 XFS_AGB_TO_DADDR(mp, agno, XFS_BNO_BLOCK(mp)),
253 BTOBB(mp->m_sb.sb_blocksize), 0); 253 BTOBB(mp->m_sb.sb_blocksize), 0);
254 block = XFS_BUF_TO_SBLOCK(bp); 254 block = XFS_BUF_TO_BLOCK(bp);
255 memset(block, 0, mp->m_sb.sb_blocksize); 255 memset(block, 0, mp->m_sb.sb_blocksize);
256 block->bb_magic = cpu_to_be32(XFS_ABTB_MAGIC); 256 block->bb_magic = cpu_to_be32(XFS_ABTB_MAGIC);
257 block->bb_level = 0; 257 block->bb_level = 0;
258 block->bb_numrecs = cpu_to_be16(1); 258 block->bb_numrecs = cpu_to_be16(1);
259 block->bb_leftsib = cpu_to_be32(NULLAGBLOCK); 259 block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK);
260 block->bb_rightsib = cpu_to_be32(NULLAGBLOCK); 260 block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK);
261 arec = XFS_ALLOC_REC_ADDR(mp, block, 1); 261 arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
262 arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp)); 262 arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp));
263 arec->ar_blockcount = cpu_to_be32( 263 arec->ar_blockcount = cpu_to_be32(
@@ -272,13 +272,13 @@ xfs_growfs_data_private(
272 bp = xfs_buf_get(mp->m_ddev_targp, 272 bp = xfs_buf_get(mp->m_ddev_targp,
273 XFS_AGB_TO_DADDR(mp, agno, XFS_CNT_BLOCK(mp)), 273 XFS_AGB_TO_DADDR(mp, agno, XFS_CNT_BLOCK(mp)),
274 BTOBB(mp->m_sb.sb_blocksize), 0); 274 BTOBB(mp->m_sb.sb_blocksize), 0);
275 block = XFS_BUF_TO_SBLOCK(bp); 275 block = XFS_BUF_TO_BLOCK(bp);
276 memset(block, 0, mp->m_sb.sb_blocksize); 276 memset(block, 0, mp->m_sb.sb_blocksize);
277 block->bb_magic = cpu_to_be32(XFS_ABTC_MAGIC); 277 block->bb_magic = cpu_to_be32(XFS_ABTC_MAGIC);
278 block->bb_level = 0; 278 block->bb_level = 0;
279 block->bb_numrecs = cpu_to_be16(1); 279 block->bb_numrecs = cpu_to_be16(1);
280 block->bb_leftsib = cpu_to_be32(NULLAGBLOCK); 280 block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK);
281 block->bb_rightsib = cpu_to_be32(NULLAGBLOCK); 281 block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK);
282 arec = XFS_ALLOC_REC_ADDR(mp, block, 1); 282 arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
283 arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp)); 283 arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp));
284 arec->ar_blockcount = cpu_to_be32( 284 arec->ar_blockcount = cpu_to_be32(
@@ -294,13 +294,13 @@ xfs_growfs_data_private(
294 bp = xfs_buf_get(mp->m_ddev_targp, 294 bp = xfs_buf_get(mp->m_ddev_targp,
295 XFS_AGB_TO_DADDR(mp, agno, XFS_IBT_BLOCK(mp)), 295 XFS_AGB_TO_DADDR(mp, agno, XFS_IBT_BLOCK(mp)),
296 BTOBB(mp->m_sb.sb_blocksize), 0); 296 BTOBB(mp->m_sb.sb_blocksize), 0);
297 block = XFS_BUF_TO_SBLOCK(bp); 297 block = XFS_BUF_TO_BLOCK(bp);
298 memset(block, 0, mp->m_sb.sb_blocksize); 298 memset(block, 0, mp->m_sb.sb_blocksize);
299 block->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); 299 block->bb_magic = cpu_to_be32(XFS_IBT_MAGIC);
300 block->bb_level = 0; 300 block->bb_level = 0;
301 block->bb_numrecs = 0; 301 block->bb_numrecs = 0;
302 block->bb_leftsib = cpu_to_be32(NULLAGBLOCK); 302 block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK);
303 block->bb_rightsib = cpu_to_be32(NULLAGBLOCK); 303 block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK);
304 error = xfs_bwrite(mp, bp); 304 error = xfs_bwrite(mp, bp);
305 if (error) { 305 if (error) {
306 goto error0; 306 goto error0;
diff --git a/fs/xfs/xfs_ialloc_btree.c b/fs/xfs/xfs_ialloc_btree.c
index 46aabb3fcbf3..99f2408e8d8e 100644
--- a/fs/xfs/xfs_ialloc_btree.c
+++ b/fs/xfs/xfs_ialloc_btree.c
@@ -375,7 +375,7 @@ xfs_inobt_maxrecs(
375 int blocklen, 375 int blocklen,
376 int leaf) 376 int leaf)
377{ 377{
378 blocklen -= sizeof(struct xfs_btree_sblock); 378 blocklen -= XFS_INOBT_BLOCK_LEN(mp);
379 379
380 if (leaf) 380 if (leaf)
381 return blocklen / sizeof(xfs_inobt_rec_t); 381 return blocklen / sizeof(xfs_inobt_rec_t);
diff --git a/fs/xfs/xfs_ialloc_btree.h b/fs/xfs/xfs_ialloc_btree.h
index fa12c85db340..37e5dd01a577 100644
--- a/fs/xfs/xfs_ialloc_btree.h
+++ b/fs/xfs/xfs_ialloc_btree.h
@@ -24,7 +24,6 @@
24 24
25struct xfs_buf; 25struct xfs_buf;
26struct xfs_btree_cur; 26struct xfs_btree_cur;
27struct xfs_btree_sblock;
28struct xfs_mount; 27struct xfs_mount;
29 28
30/* 29/*
@@ -70,11 +69,6 @@ typedef struct xfs_inobt_key {
70/* btree pointer type */ 69/* btree pointer type */
71typedef __be32 xfs_inobt_ptr_t; 70typedef __be32 xfs_inobt_ptr_t;
72 71
73/* btree block header type */
74typedef struct xfs_btree_sblock xfs_inobt_block_t;
75
76#define XFS_BUF_TO_INOBT_BLOCK(bp) ((xfs_inobt_block_t *)XFS_BUF_PTR(bp))
77
78/* 72/*
79 * Bit manipulations for ir_free. 73 * Bit manipulations for ir_free.
80 */ 74 */
@@ -96,6 +90,13 @@ typedef struct xfs_btree_sblock xfs_inobt_block_t;
96#define XFS_PREALLOC_BLOCKS(mp) ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1)) 90#define XFS_PREALLOC_BLOCKS(mp) ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1))
97 91
98/* 92/*
93 * Btree block header size depends on a superblock flag.
94 *
95 * (not quite yet, but soon)
96 */
97#define XFS_INOBT_BLOCK_LEN(mp) XFS_BTREE_SBLOCK_LEN
98
99/*
99 * Record, key, and pointer address macros for btree blocks. 100 * Record, key, and pointer address macros for btree blocks.
100 * 101 *
101 * (note that some of these may appear unused, but they are used in userspace) 102 * (note that some of these may appear unused, but they are used in userspace)
@@ -103,19 +104,19 @@ typedef struct xfs_btree_sblock xfs_inobt_block_t;
103#define XFS_INOBT_REC_ADDR(mp, block, index) \ 104#define XFS_INOBT_REC_ADDR(mp, block, index) \
104 ((xfs_inobt_rec_t *) \ 105 ((xfs_inobt_rec_t *) \
105 ((char *)(block) + \ 106 ((char *)(block) + \
106 sizeof(struct xfs_btree_sblock) + \ 107 XFS_INOBT_BLOCK_LEN(mp) + \
107 (((index) - 1) * sizeof(xfs_inobt_rec_t)))) 108 (((index) - 1) * sizeof(xfs_inobt_rec_t))))
108 109
109#define XFS_INOBT_KEY_ADDR(mp, block, index) \ 110#define XFS_INOBT_KEY_ADDR(mp, block, index) \
110 ((xfs_inobt_key_t *) \ 111 ((xfs_inobt_key_t *) \
111 ((char *)(block) + \ 112 ((char *)(block) + \
112 sizeof(struct xfs_btree_sblock) + \ 113 XFS_INOBT_BLOCK_LEN(mp) + \
113 ((index) - 1) * sizeof(xfs_inobt_key_t))) 114 ((index) - 1) * sizeof(xfs_inobt_key_t)))
114 115
115#define XFS_INOBT_PTR_ADDR(mp, block, index, maxrecs) \ 116#define XFS_INOBT_PTR_ADDR(mp, block, index, maxrecs) \
116 ((xfs_inobt_ptr_t *) \ 117 ((xfs_inobt_ptr_t *) \
117 ((char *)(block) + \ 118 ((char *)(block) + \
118 sizeof(struct xfs_btree_sblock) + \ 119 XFS_INOBT_BLOCK_LEN(mp) + \
119 (maxrecs) * sizeof(xfs_inobt_key_t) + \ 120 (maxrecs) * sizeof(xfs_inobt_key_t) + \
120 ((index) - 1) * sizeof(xfs_inobt_ptr_t))) 121 ((index) - 1) * sizeof(xfs_inobt_ptr_t)))
121 122
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 7b4f13c710d6..bc33762abc49 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -2352,7 +2352,7 @@ xfs_iroot_realloc(
2352 struct xfs_mount *mp = ip->i_mount; 2352 struct xfs_mount *mp = ip->i_mount;
2353 int cur_max; 2353 int cur_max;
2354 xfs_ifork_t *ifp; 2354 xfs_ifork_t *ifp;
2355 xfs_bmbt_block_t *new_broot; 2355 struct xfs_btree_block *new_broot;
2356 int new_max; 2356 int new_max;
2357 size_t new_size; 2357 size_t new_size;
2358 char *np; 2358 char *np;
@@ -2373,8 +2373,7 @@ xfs_iroot_realloc(
2373 */ 2373 */
2374 if (ifp->if_broot_bytes == 0) { 2374 if (ifp->if_broot_bytes == 0) {
2375 new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(rec_diff); 2375 new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(rec_diff);
2376 ifp->if_broot = (xfs_bmbt_block_t*)kmem_alloc(new_size, 2376 ifp->if_broot = kmem_alloc(new_size, KM_SLEEP);
2377 KM_SLEEP);
2378 ifp->if_broot_bytes = (int)new_size; 2377 ifp->if_broot_bytes = (int)new_size;
2379 return; 2378 return;
2380 } 2379 }
@@ -2388,9 +2387,7 @@ xfs_iroot_realloc(
2388 cur_max = xfs_bmbt_maxrecs(mp, ifp->if_broot_bytes, 0); 2387 cur_max = xfs_bmbt_maxrecs(mp, ifp->if_broot_bytes, 0);
2389 new_max = cur_max + rec_diff; 2388 new_max = cur_max + rec_diff;
2390 new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(new_max); 2389 new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(new_max);
2391 ifp->if_broot = (xfs_bmbt_block_t *) 2390 ifp->if_broot = kmem_realloc(ifp->if_broot, new_size,
2392 kmem_realloc(ifp->if_broot,
2393 new_size,
2394 (size_t)XFS_BMAP_BROOT_SPACE_CALC(cur_max), /* old size */ 2391 (size_t)XFS_BMAP_BROOT_SPACE_CALC(cur_max), /* old size */
2395 KM_SLEEP); 2392 KM_SLEEP);
2396 op = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1, 2393 op = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1,
@@ -2418,11 +2415,11 @@ xfs_iroot_realloc(
2418 else 2415 else
2419 new_size = 0; 2416 new_size = 0;
2420 if (new_size > 0) { 2417 if (new_size > 0) {
2421 new_broot = (xfs_bmbt_block_t *)kmem_alloc(new_size, KM_SLEEP); 2418 new_broot = kmem_alloc(new_size, KM_SLEEP);
2422 /* 2419 /*
2423 * First copy over the btree block header. 2420 * First copy over the btree block header.
2424 */ 2421 */
2425 memcpy(new_broot, ifp->if_broot, sizeof(xfs_bmbt_block_t)); 2422 memcpy(new_broot, ifp->if_broot, XFS_BTREE_LBLOCK_LEN);
2426 } else { 2423 } else {
2427 new_broot = NULL; 2424 new_broot = NULL;
2428 ifp->if_flags &= ~XFS_IFBROOT; 2425 ifp->if_flags &= ~XFS_IFBROOT;
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index 55d50b888b68..6fd20fc179a4 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -63,7 +63,7 @@ typedef struct xfs_ext_irec {
63typedef struct xfs_ifork { 63typedef struct xfs_ifork {
64 int if_bytes; /* bytes in if_u1 */ 64 int if_bytes; /* bytes in if_u1 */
65 int if_real_bytes; /* bytes allocated in if_u1 */ 65 int if_real_bytes; /* bytes allocated in if_u1 */
66 xfs_bmbt_block_t *if_broot; /* file's incore btree root */ 66 struct xfs_btree_block *if_broot; /* file's incore btree root */
67 short if_broot_bytes; /* bytes allocated for root */ 67 short if_broot_bytes; /* bytes allocated for root */
68 unsigned char if_flags; /* per-fork flags */ 68 unsigned char if_flags; /* per-fork flags */
69 unsigned char if_ext_max; /* max # of extent records */ 69 unsigned char if_ext_max; /* max # of extent records */
@@ -213,7 +213,6 @@ struct ktrace;
213struct xfs_buf; 213struct xfs_buf;
214struct xfs_bmap_free; 214struct xfs_bmap_free;
215struct xfs_bmbt_irec; 215struct xfs_bmbt_irec;
216struct xfs_bmbt_block;
217struct xfs_inode_log_item; 216struct xfs_inode_log_item;
218struct xfs_mount; 217struct xfs_mount;
219struct xfs_trans; 218struct xfs_trans;
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 23c3a782a9e7..199c8ea36474 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2452,8 +2452,8 @@ xlog_recover_do_inode_trans(
2452 break; 2452 break;
2453 2453
2454 case XFS_ILOG_DBROOT: 2454 case XFS_ILOG_DBROOT:
2455 xfs_bmbt_to_bmdr(mp, (xfs_bmbt_block_t *)src, len, 2455 xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src, len,
2456 &(dip->di_u.di_bmbt), 2456 &dip->di_u.di_bmbt,
2457 XFS_DFORK_DSIZE(dip, mp)); 2457 XFS_DFORK_DSIZE(dip, mp));
2458 break; 2458 break;
2459 2459
@@ -2490,8 +2490,8 @@ xlog_recover_do_inode_trans(
2490 2490
2491 case XFS_ILOG_ABROOT: 2491 case XFS_ILOG_ABROOT:
2492 dest = XFS_DFORK_APTR(dip); 2492 dest = XFS_DFORK_APTR(dip);
2493 xfs_bmbt_to_bmdr(mp, (xfs_bmbt_block_t *)src, len, 2493 xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src,
2494 (xfs_bmdr_block_t*)dest, 2494 len, (xfs_bmdr_block_t*)dest,
2495 XFS_DFORK_ASIZE(dip, mp)); 2495 XFS_DFORK_ASIZE(dip, mp));
2496 break; 2496 break;
2497 2497