|
|
| version 1.104, 2007/02/06 14:35:53 | version 1.105, 2007/02/07 02:51:56 |
|---|---|
| Line 913 xfs_rtcheck_alloc_range( | Line 913 xfs_rtcheck_alloc_range( |
| } | } |
| #endif | #endif |
| #ifdef DEBUG | |
| /* | |
| * Check whether the given block in the bitmap has the given value. | |
| */ | |
| STATIC int /* 1 for matches, 0 for not */ | |
| xfs_rtcheck_bit( | |
| xfs_mount_t *mp, /* file system mount structure */ | |
| xfs_trans_t *tp, /* transaction pointer */ | |
| xfs_rtblock_t start, /* bit (block) to check */ | |
| int val) /* 1 for free, 0 for allocated */ | |
| { | |
| int bit; /* bit number in the word */ | |
| xfs_rtblock_t block; /* bitmap block number */ | |
| xfs_buf_t *bp; /* buf for the block */ | |
| xfs_rtword_t *bufp; /* pointer into the buffer */ | |
| /* REFERENCED */ | |
| int error; /* error value */ | |
| xfs_rtword_t wdiff; /* difference between bit & expected */ | |
| int word; /* word number in the buffer */ | |
| xfs_rtword_t wval; /* word value from buffer */ | |
| block = XFS_BITTOBLOCK(mp, start); | |
| error = xfs_rtbuf_get(mp, tp, block, 0, &bp); | |
| bufp = (xfs_rtword_t *)XFS_BUF_PTR(bp); | |
| word = XFS_BITTOWORD(mp, start); | |
| bit = (int)(start & (XFS_NBWORD - 1)); | |
| wval = bufp[word]; | |
| xfs_trans_brelse(tp, bp); | |
| wdiff = (wval ^ -val) & ((xfs_rtword_t)1 << bit); | |
| return !wdiff; | |
| } | |
| #endif /* DEBUG */ | |
| #if 0 | |
| /* | |
| * Check that the given extent (block range) is free already. | |
| */ | |
| STATIC int /* error */ | |
| xfs_rtcheck_free_range( | |
| xfs_mount_t *mp, /* file system mount point */ | |
| xfs_trans_t *tp, /* transaction pointer */ | |
| xfs_rtblock_t bno, /* starting block number of extent */ | |
| xfs_extlen_t len, /* length of extent */ | |
| int *stat) /* out: 1 for free, 0 for not */ | |
| { | |
| xfs_rtblock_t new; /* dummy for xfs_rtcheck_range */ | |
| return xfs_rtcheck_range(mp, tp, bno, len, 1, &new, stat); | |
| } | |
| #endif | |
| /* | /* |
| * Check that the given range is either all allocated (val = 0) or | * Check that the given range is either all allocated (val = 0) or |
| * all free (val = 1). | * all free (val = 1). |
| Line 2382 xfs_rtpick_extent( | Line 2331 xfs_rtpick_extent( |
| *pick = b; | *pick = b; |
| return 0; | return 0; |
| } | } |
| #ifdef DEBUG | |
| /* | |
| * Debug code: print out the value of a range in the bitmap. | |
| */ | |
| void | |
| xfs_rtprint_range( | |
| xfs_mount_t *mp, /* file system mount structure */ | |
| xfs_trans_t *tp, /* transaction pointer */ | |
| xfs_rtblock_t start, /* starting block to print */ | |
| xfs_extlen_t len) /* length to print */ | |
| { | |
| xfs_extlen_t i; /* block number in the extent */ | |
| cmn_err(CE_DEBUG, "%Ld: ", (long long)start); | |
| for (i = 0; i < len; i++) | |
| cmn_err(CE_DEBUG, "%d", xfs_rtcheck_bit(mp, tp, start + i, 1)); | |
| cmn_err(CE_DEBUG, "\n"); | |
| } | |
| /* | |
| * Debug code: print the summary file. | |
| */ | |
| void | |
| xfs_rtprint_summary( | |
| xfs_mount_t *mp, /* file system mount structure */ | |
| xfs_trans_t *tp) /* transaction pointer */ | |
| { | |
| xfs_suminfo_t c; /* summary data */ | |
| xfs_rtblock_t i; /* bitmap block number */ | |
| int l; /* summary information level */ | |
| int p; /* flag for printed anything */ | |
| xfs_fsblock_t sb; /* summary block number */ | |
| xfs_buf_t *sumbp; /* summary block buffer */ | |
| sumbp = NULL; | |
| for (l = 0; l < mp->m_rsumlevels; l++) { | |
| for (p = 0, i = 0; i < mp->m_sb.sb_rbmblocks; i++) { | |
| (void)xfs_rtget_summary(mp, tp, l, i, &sumbp, &sb, &c); | |
| if (c) { | |
| if (!p) { | |
| cmn_err(CE_DEBUG, "%Ld-%Ld:", 1LL << l, | |
| XFS_RTMIN((1LL << l) + | |
| ((1LL << l) - 1LL), | |
| mp->m_sb.sb_rextents)); | |
| p = 1; | |
| } | |
| cmn_err(CE_DEBUG, " %Ld:%d", (long long)i, c); | |
| } | |
| } | |
| if (p) | |
| cmn_err(CE_DEBUG, "\n"); | |
| } | |
| if (sumbp) | |
| xfs_trans_brelse(tp, sumbp); | |
| } | |
| #endif /* DEBUG */ |