diff options
author | phk <phk@FreeBSD.org> | 2000-03-20 10:44:49 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2000-03-20 10:44:49 +0000 |
commit | a246e10f55686681d4b6bd4dba5ca661b4e34bb0 (patch) | |
tree | 13a3ded179bf1de0aff7c33b0eba0534aa2dcf09 /sys/nfs | |
parent | f274a82c1448c090620cb35f8516831602a12658 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/nfs/nfs_bio.c | 24 | ||||
-rw-r--r-- | sys/nfs/nfs_syscalls.c | 2 | ||||
-rw-r--r-- | sys/nfs/nfs_vnops.c | 7 |
3 files changed, 18 insertions, 15 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; diff --git a/sys/nfs/nfs_syscalls.c b/sys/nfs/nfs_syscalls.c index 14ff8d1..8d82a43 100644 --- a/sys/nfs/nfs_syscalls.c +++ b/sys/nfs/nfs_syscalls.c @@ -961,7 +961,7 @@ nfssvc_iod(p) nmp->nm_bufqwant = FALSE; wakeup(&nmp->nm_bufq); } - if (bp->b_flags & B_READ) + if (bp->b_iocmd == BIO_READ) (void) nfs_doio(bp, bp->b_rcred, (struct proc *)0); else (void) nfs_doio(bp, bp->b_wcred, (struct proc *)0); diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c index 0a6de2f..0dbbe09 100644 --- a/sys/nfs/nfs_vnops.c +++ b/sys/nfs/nfs_vnops.c @@ -2705,7 +2705,7 @@ nfs_strategy(ap) else p = curproc; /* XXX */ - if (bp->b_flags & B_READ) + if (bp->b_iocmd == BIO_READ) cr = bp->b_rcred; else cr = bp->b_wcred; @@ -2939,7 +2939,7 @@ again: vp->v_numoutput++; bp->b_flags |= B_ASYNC; bundirty(bp); - bp->b_flags &= ~(B_READ|B_DONE|B_ERROR); + bp->b_flags &= ~(B_DONE|B_ERROR); bp->b_dirtyoff = bp->b_dirtyend = 0; splx(s); biodone(bp); @@ -3116,7 +3116,8 @@ nfs_writebp(bp, force, procp) s = splbio(); bundirty(bp); - bp->b_flags &= ~(B_READ|B_DONE|B_ERROR); + bp->b_flags &= ~(B_DONE|B_ERROR); + bp->b_iocmd = BIO_WRITE; bp->b_vp->v_numoutput++; curproc->p_stats->p_ru.ru_oublock++; |