summaryrefslogtreecommitdiffstats
path: root/sys/nfs/nfs_bio.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2000-03-20 10:44:49 +0000
committerphk <phk@FreeBSD.org>2000-03-20 10:44:49 +0000
commita246e10f55686681d4b6bd4dba5ca661b4e34bb0 (patch)
tree13a3ded179bf1de0aff7c33b0eba0534aa2dcf09 /sys/nfs/nfs_bio.c
parentf274a82c1448c090620cb35f8516831602a12658 (diff)
downloadFreeBSD-src-a246e10f55686681d4b6bd4dba5ca661b4e34bb0.zip
FreeBSD-src-a246e10f55686681d4b6bd4dba5ca661b4e34bb0.tar.gz
Remove B_READ, B_WRITE and B_FREEBUF and replace them with a new
field in struct buf: b_iocmd. The b_iocmd is enforced to have exactly one bit set. B_WRITE was bogusly defined as zero giving rise to obvious coding mistakes. Also eliminate the redundant struct buf flag B_CALL, it can just as efficiently be done by comparing b_iodone to NULL. Should you get a panic or drop into the debugger, complaining about "b_iocmd", don't continue. It is likely to write on your disk where it should have been reading. This change is a step in the direction towards a stackable BIO capability. A lot of this patch were machine generated (Thanks to style(9) compliance!) Vinum users: Greg has not had time to test this yet, be careful.
Diffstat (limited to 'sys/nfs/nfs_bio.c')
-rw-r--r--sys/nfs/nfs_bio.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/sys/nfs/nfs_bio.c b/sys/nfs/nfs_bio.c
index 4b9dcec..b137fe8 100644
--- a/sys/nfs/nfs_bio.c
+++ b/sys/nfs/nfs_bio.c
@@ -465,7 +465,8 @@ nfs_bioread(vp, uio, ioflag, cred)
if (!rabp)
return (EINTR);
if ((rabp->b_flags & (B_CACHE|B_DELWRI)) == 0) {
- rabp->b_flags |= (B_READ | B_ASYNC);
+ rabp->b_flags |= B_ASYNC;
+ rabp->b_iocmd = BIO_READ;
vfs_busy_pages(rabp, 0);
if (nfs_asyncio(rabp, cred, p)) {
rabp->b_flags |= B_INVAL|B_ERROR;
@@ -526,7 +527,7 @@ again:
*/
if ((bp->b_flags & B_CACHE) == 0) {
- bp->b_flags |= B_READ;
+ bp->b_iocmd = BIO_READ;
vfs_busy_pages(bp, 0);
error = nfs_doio(bp, cred, p);
if (error) {
@@ -553,7 +554,7 @@ again:
if (!bp)
return (EINTR);
if ((bp->b_flags & B_CACHE) == 0) {
- bp->b_flags |= B_READ;
+ bp->b_iocmd = BIO_READ;
vfs_busy_pages(bp, 0);
error = nfs_doio(bp, cred, p);
if (error) {
@@ -577,7 +578,7 @@ again:
if (!bp)
return (EINTR);
if ((bp->b_flags & B_CACHE) == 0) {
- bp->b_flags |= B_READ;
+ bp->b_iocmd = BIO_READ;
vfs_busy_pages(bp, 0);
error = nfs_doio(bp, cred, p);
if (error) {
@@ -605,7 +606,7 @@ again:
if (!bp)
return (EINTR);
if ((bp->b_flags & B_CACHE) == 0) {
- bp->b_flags |= B_READ;
+ bp->b_iocmd = BIO_READ;
vfs_busy_pages(bp, 0);
error = nfs_doio(bp, cred, p);
/*
@@ -648,7 +649,8 @@ again:
rabp = nfs_getcacheblk(vp, lbn + 1, NFS_DIRBLKSIZ, p);
if (rabp) {
if ((rabp->b_flags & (B_CACHE|B_DELWRI)) == 0) {
- rabp->b_flags |= (B_READ | B_ASYNC);
+ rabp->b_flags |= B_ASYNC;
+ rabp->b_iocmd = BIO_READ;
vfs_busy_pages(rabp, 0);
if (nfs_asyncio(rabp, cred, p)) {
rabp->b_flags |= B_INVAL|B_ERROR;
@@ -936,7 +938,7 @@ again:
}
if ((bp->b_flags & B_CACHE) == 0) {
- bp->b_flags |= B_READ;
+ bp->b_iocmd = BIO_READ;
vfs_busy_pages(bp, 0);
error = nfs_doio(bp, cred, p);
if (error) {
@@ -1232,7 +1234,7 @@ nfs_asyncio(bp, cred, procp)
* leave the async daemons for more important rpc's (such as reads
* and writes).
*/
- if ((bp->b_flags & (B_READ|B_NEEDCOMMIT)) == B_NEEDCOMMIT &&
+ if (bp->b_iocmd == BIO_WRITE && (bp->b_flags & B_NEEDCOMMIT) &&
(nmp->nm_bufqiods > nfs_numasync / 2)) {
return(EIO);
}
@@ -1309,7 +1311,7 @@ again:
}
}
- if (bp->b_flags & B_READ) {
+ if (bp->b_iocmd == BIO_READ) {
if (bp->b_rcred == NOCRED && cred != NOCRED) {
crhold(cred);
bp->b_rcred = cred;
@@ -1383,7 +1385,7 @@ nfs_doio(bp, cr, p)
/* mapping was done by vmapbuf() */
io.iov_base = bp->b_data;
uiop->uio_offset = ((off_t)bp->b_blkno) * DEV_BSIZE;
- if (bp->b_flags & B_READ) {
+ if (bp->b_iocmd == BIO_READ) {
uiop->uio_rw = UIO_READ;
nfsstats.read_physios++;
error = nfs_readrpc(vp, uiop, cr);
@@ -1399,7 +1401,7 @@ nfs_doio(bp, cr, p)
bp->b_flags |= B_ERROR;
bp->b_error = error;
}
- } else if (bp->b_flags & B_READ) {
+ } else if (bp->b_iocmd == BIO_READ) {
io.iov_len = uiop->uio_resid = bp->b_bcount;
io.iov_base = bp->b_data;
uiop->uio_rw = UIO_READ;
OpenPOWER on IntegriCloud