+ if (bp->b_blkno != bp->b_lblkno && bp->b_blkno != blkno &&
+ !((bp->b_flags & B_READ) && (long)blkno == -1))
+ panic("ufs_strategy: bad blkno %d != %d", bp->b_blkno,
+ blkno);
+ /* If this is a clustered block, check sub-blocks as well */
+ if (bp->b_saveaddr) {
+ struct buf *tbp;
+ struct cluster_save *b_save = bp->b_saveaddr;
+ int i;
+ daddr_t bn;
+ for (i = 0; i < b_save->bs_nchildren; i++) {
+ tbp = b_save->bs_children[i];
+ if ((tbp->b_flags & B_XXX) == 0 &&
+ !VOP_BMAP(vp, tbp->b_lblkno, NULL,
+ &bn, NULL) && tbp->b_blkno != bn)
+ panic("ufs_strategy: bad bno %d != %d",
+ bp->b_blkno, blkno);
+ }
+ }
+ bp->b_blkno = blkno;