|
|
| version 1.362, 2007/02/06 14:35:53 | version 1.363, 2007/02/07 02:51:06 |
|---|---|
| Line 410 xfs_bmap_count_leaves( | Line 410 xfs_bmap_count_leaves( |
| STATIC int | STATIC int |
| xfs_bmap_disk_count_leaves( | xfs_bmap_disk_count_leaves( |
| xfs_ifork_t *ifp, | xfs_ifork_t *ifp, |
| xfs_mount_t *mp, | |
| xfs_extnum_t idx, | xfs_extnum_t idx, |
| xfs_bmbt_block_t *block, | xfs_bmbt_block_t *block, |
| int numrecs, | int numrecs, |
| Line 4533 xfs_bmap_read_extents( | Line 4532 xfs_bmap_read_extents( |
| error0); | error0); |
| if (level == 0) | if (level == 0) |
| break; | break; |
| pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, block, | pp = XFS_BTREE_PTR_ADDR(xfs_bmbt, block, 1, mp->m_bmap_dmxr[1]); |
| 1, mp->m_bmap_dmxr[1]); | |
| bno = be64_to_cpu(*pp); | bno = be64_to_cpu(*pp); |
| XFS_WANT_CORRUPTED_GOTO(XFS_FSB_SANITY_CHECK(mp, bno), error0); | XFS_WANT_CORRUPTED_GOTO(XFS_FSB_SANITY_CHECK(mp, bno), error0); |
| xfs_trans_brelse(tp, bp); | xfs_trans_brelse(tp, bp); |
| Line 4577 xfs_bmap_read_extents( | Line 4575 xfs_bmap_read_extents( |
| /* | /* |
| * Copy records into the extent records. | * Copy records into the extent records. |
| */ | */ |
| frp = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, | frp = XFS_BTREE_REC_ADDR(xfs_bmbt, block, 1); |
| block, 1, mp->m_bmap_dmxr[0]); | |
| start = i; | start = i; |
| for (j = 0; j < num_recs; j++, i++, frp++) { | for (j = 0; j < num_recs; j++, i++, frp++) { |
| trp = xfs_iext_get_ext(ifp, i); | trp = xfs_iext_get_ext(ifp, i); |
| Line 6156 xfs_check_block( | Line 6153 xfs_check_block( |
| if (root) { | if (root) { |
| keyp = XFS_BMAP_BROOT_KEY_ADDR(block, i, sz); | keyp = XFS_BMAP_BROOT_KEY_ADDR(block, i, sz); |
| } else { | } else { |
| keyp = XFS_BTREE_KEY_ADDR(mp->m_sb.sb_blocksize, | keyp = XFS_BTREE_KEY_ADDR(xfs_bmbt, block, i); |
| xfs_bmbt, block, i, dmxr); | |
| } | } |
| if (prevp) { | if (prevp) { |
| Line 6172 xfs_check_block( | Line 6168 xfs_check_block( |
| if (root) { | if (root) { |
| pp = XFS_BMAP_BROOT_PTR_ADDR(block, i, sz); | pp = XFS_BMAP_BROOT_PTR_ADDR(block, i, sz); |
| } else { | } else { |
| pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, | pp = XFS_BTREE_PTR_ADDR(xfs_bmbt, block, i, dmxr); |
| xfs_bmbt, block, i, dmxr); | |
| } | } |
| for (j = i+1; j <= be16_to_cpu(block->bb_numrecs); j++) { | for (j = i+1; j <= be16_to_cpu(block->bb_numrecs); j++) { |
| if (root) { | if (root) { |
| thispa = XFS_BMAP_BROOT_PTR_ADDR(block, j, sz); | thispa = XFS_BMAP_BROOT_PTR_ADDR(block, j, sz); |
| } else { | } else { |
| thispa = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, | thispa = XFS_BTREE_PTR_ADDR(xfs_bmbt, block, j, |
| xfs_bmbt, block, j, dmxr); | dmxr); |
| } | } |
| if (*thispa == *pp) { | if (*thispa == *pp) { |
| cmn_err(CE_WARN, "%s: thispa(%d) == pp(%d) %Ld", | cmn_err(CE_WARN, "%s: thispa(%d) == pp(%d) %Ld", |
| Line 6267 xfs_bmap_check_leaf_extents( | Line 6262 xfs_bmap_check_leaf_extents( |
| */ | */ |
| xfs_check_block(block, mp, 0, 0); | xfs_check_block(block, mp, 0, 0); |
| pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, block, | pp = XFS_BTREE_PTR_ADDR(xfs_bmbt, block, 1, mp->m_bmap_dmxr[1]); |
| 1, mp->m_bmap_dmxr[1]); | |
| bno = be64_to_cpu(*pp); | bno = be64_to_cpu(*pp); |
| XFS_WANT_CORRUPTED_GOTO(XFS_FSB_SANITY_CHECK(mp, bno), error0); | XFS_WANT_CORRUPTED_GOTO(XFS_FSB_SANITY_CHECK(mp, bno), error0); |
| if (bp_release) { | if (bp_release) { |
| Line 6305 xfs_bmap_check_leaf_extents( | Line 6299 xfs_bmap_check_leaf_extents( |
| * conform with the first entry in this one. | * conform with the first entry in this one. |
| */ | */ |
| ep = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, | ep = XFS_BTREE_REC_ADDR(xfs_bmbt, block, 1); |
| block, 1, mp->m_bmap_dmxr[0]); | |
| for (j = 1; j < num_recs; j++) { | for (j = 1; j < num_recs; j++) { |
| nextp = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, | nextp = XFS_BTREE_REC_ADDR(xfs_bmbt, block, j + 1); |
| block, j + 1, mp->m_bmap_dmxr[0]); | |
| if (lastp) { | if (lastp) { |
| xfs_btree_check_rec(XFS_BTNUM_BMAP, | xfs_btree_check_rec(XFS_BTNUM_BMAP, |
| (void *)lastp, (void *)ep); | (void *)lastp, (void *)ep); |
| Line 6454 xfs_bmap_count_tree( | Line 6446 xfs_bmap_count_tree( |
| } | } |
| /* Dive to the next level */ | /* Dive to the next level */ |
| pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, | pp = XFS_BTREE_PTR_ADDR(xfs_bmbt, block, 1, mp->m_bmap_dmxr[1]); |
| xfs_bmbt, block, 1, mp->m_bmap_dmxr[1]); | |
| bno = be64_to_cpu(*pp); | bno = be64_to_cpu(*pp); |
| if (unlikely((error = | if (unlikely((error = |
| xfs_bmap_count_tree(mp, tp, ifp, bno, level, count)) < 0)) { | xfs_bmap_count_tree(mp, tp, ifp, bno, level, count)) < 0)) { |
| Line 6470 xfs_bmap_count_tree( | Line 6461 xfs_bmap_count_tree( |
| for (;;) { | for (;;) { |
| nextbno = be64_to_cpu(block->bb_rightsib); | nextbno = be64_to_cpu(block->bb_rightsib); |
| numrecs = be16_to_cpu(block->bb_numrecs); | numrecs = be16_to_cpu(block->bb_numrecs); |
| if (unlikely(xfs_bmap_disk_count_leaves(ifp, mp, | if (unlikely(xfs_bmap_disk_count_leaves(ifp, |
| 0, block, numrecs, count) < 0)) { | 0, block, numrecs, count) < 0)) { |
| xfs_trans_brelse(tp, bp); | xfs_trans_brelse(tp, bp); |
| XFS_ERROR_REPORT("xfs_bmap_count_tree(2)", | XFS_ERROR_REPORT("xfs_bmap_count_tree(2)", |
| Line 6518 xfs_bmap_count_leaves( | Line 6509 xfs_bmap_count_leaves( |
| int | int |
| xfs_bmap_disk_count_leaves( | xfs_bmap_disk_count_leaves( |
| xfs_ifork_t *ifp, | xfs_ifork_t *ifp, |
| xfs_mount_t *mp, | |
| xfs_extnum_t idx, | xfs_extnum_t idx, |
| xfs_bmbt_block_t *block, | xfs_bmbt_block_t *block, |
| int numrecs, | int numrecs, |
| Line 6528 xfs_bmap_disk_count_leaves( | Line 6518 xfs_bmap_disk_count_leaves( |
| xfs_bmbt_rec_t *frp; | xfs_bmbt_rec_t *frp; |
| for (b = 1; b <= numrecs; b++) { | for (b = 1; b <= numrecs; b++) { |
| frp = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize, | frp = XFS_BTREE_REC_ADDR(xfs_bmbt, block, idx + b); |
| xfs_bmbt, block, idx + b, mp->m_bmap_dmxr[0]); | |
| *count += xfs_bmbt_disk_get_blockcount(frp); | *count += xfs_bmbt_disk_get_blockcount(frp); |
| } | } |
| return 0; | return 0; |