*/
yieldid = make64(bp->b_dev, bp->b_blocknr);
assert(bp->b_bytes == fs_block_size);
- bp->b_dev = NO_DEV;
+ BP_CLEARDEV(bp);
}
/* Fill in block's parameters and add it to the hash chain where it goes. */
- bp->b_dev = dev; /* fill in device number */
+ if(dev == NO_DEV) BP_CLEARDEV(bp);
+ else BP_SETDEV(bp, dev);
bp->b_blocknr = block; /* fill in block number */
bp->b_count++; /* record that block is being used */
b = BUFHASH(bp->b_blocknr);
if(only_search == PREFETCH) {
/* PREFETCH: don't do i/o. */
- bp->b_dev = NO_DEV;
+ BP_CLEARDEV(bp);
} else if (only_search == NORMAL) {
read_block(bp);
} else if(only_search == NO_READ) {
}
if (op_failed) {
- bp->b_dev = NO_DEV; /* invalidate block */
+ BP_CLEARDEV(bp); /* invalidate block */
/* Report read errors to interested parties. */
rdwt_err = r;
register struct buf *bp;
for (bp = &buf[0]; bp < &buf[nr_bufs]; bp++)
- if (bp->b_dev == device) bp->b_dev = NO_DEV;
+ if (bp->b_dev == device) BP_CLEARDEV(bp);
vm_forgetblocks();
}
if (r < (ssize_t) fs_block_size) {
/* Transfer failed. */
if (i == 0) {
- bp->b_dev = NO_DEV; /* Invalidate block */
+ BP_CLEARDEV(bp); /* Invalidate block */
vm_forgetblocks();
}
break;
}
if (rw_flag == READING) {
- bp->b_dev = dev; /* validate block */
+ BP_SETDEV(bp, dev); /* validate block */
put_block(bp, PARTIAL_DATA_BLOCK);
} else {
MARKCLEAN(bp);
for (bp = &buf[0]; bp < &buf[nr_bufs]; bp++) {
bp->b_blocknr = NO_BLOCK;
- bp->b_dev = NO_DEV;
+ BP_CLEARDEV(bp);
bp->b_next = bp + 1;
bp->b_prev = bp - 1;
bp->bp = NULL;