diff options
author | mckusick <mckusick@FreeBSD.org> | 1999-06-26 02:47:16 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 1999-06-26 02:47:16 +0000 |
commit | 5b58f2f951911f1075788268f99efccf1dba60eb (patch) | |
tree | 3f01ed42f71231eaa6a8cfa08b267634f1923fb1 /sys/vm | |
parent | 3213b13650cb2206bbd62b5b1764d148750f63a0 (diff) | |
download | FreeBSD-src-5b58f2f951911f1075788268f99efccf1dba60eb.zip FreeBSD-src-5b58f2f951911f1075788268f99efccf1dba60eb.tar.gz |
Convert buffer locking from using the B_BUSY and B_WANTED flags to using
lockmgr locks. This commit should be functionally equivalent to the old
semantics. That is, all buffer locking is done with LK_EXCLUSIVE
requests. Changes to take advantage of LK_SHARED and LK_RECURSIVE will
be done in future commits.
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/swap_pager.c | 9 | ||||
-rw-r--r-- | sys/vm/vm_pager.c | 21 | ||||
-rw-r--r-- | sys/vm/vm_swap.c | 4 | ||||
-rw-r--r-- | sys/vm/vnode_pager.c | 6 |
4 files changed, 22 insertions, 18 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 2651be4..74ca75e 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -64,7 +64,7 @@ * * @(#)swap_pager.c 8.9 (Berkeley) 3/21/94 * - * $Id: swap_pager.c,v 1.117 1999/03/14 09:20:00 julian Exp $ + * $Id: swap_pager.c,v 1.118 1999/05/06 20:00:33 phk Exp $ */ #include <sys/param.h> @@ -1108,7 +1108,7 @@ swap_pager_getpages(object, m, count, reqpage) pmap_qenter(kva, m + i, j - i); - bp->b_flags = B_BUSY | B_READ | B_CALL; + bp->b_flags = B_READ | B_CALL; bp->b_iodone = swp_pager_async_iodone; bp->b_rcred = bp->b_wcred = proc0.p_ucred; bp->b_data = (caddr_t) kva; @@ -1358,10 +1358,10 @@ swap_pager_putpages(object, m, count, sync, rtvals) if (sync == TRUE) { bp = getpbuf(&nsw_wcount_sync); - bp->b_flags = B_BUSY | B_CALL; + bp->b_flags = B_CALL; } else { bp = getpbuf(&nsw_wcount_async); - bp->b_flags = B_BUSY | B_CALL | B_ASYNC; + bp->b_flags = B_CALL | B_ASYNC; } bp->b_spc = NULL; /* not used, but NULL-out anyway */ @@ -1413,6 +1413,7 @@ swap_pager_putpages(object, m, count, sync, rtvals) if (sync == FALSE) { bp->b_iodone = swp_pager_async_iodone; + BUF_KERNPROC(bp); VOP_STRATEGY(bp->b_vp, bp); for (j = 0; j < n; ++j) diff --git a/sys/vm/vm_pager.c b/sys/vm/vm_pager.c index 9055003..829258b 100644 --- a/sys/vm/vm_pager.c +++ b/sys/vm/vm_pager.c @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_pager.c,v 1.46 1999/05/02 23:57:14 alc Exp $ + * $Id: vm_pager.c,v 1.47 1999/05/06 20:00:34 phk Exp $ */ /* @@ -218,6 +218,8 @@ vm_pager_bufferinit() */ for (i = 0; i < nswbuf; i++, bp++) { TAILQ_INSERT_HEAD(&bswlist, bp, b_freelist); + BUF_LOCKINIT(bp); + LIST_INIT(&bp->b_dep); bp->b_rcred = bp->b_wcred = NOCRED; bp->b_xflags = 0; } @@ -338,7 +340,6 @@ vm_pager_object_lookup(pg_list, handle) static void initpbuf(struct buf *bp) { - bzero(bp, sizeof *bp); bp->b_rcred = NOCRED; bp->b_wcred = NOCRED; bp->b_qindex = QUEUE_NONE; @@ -346,6 +347,9 @@ initpbuf(struct buf *bp) { bp->b_kvabase = bp->b_data; bp->b_kvasize = MAXPHYS; bp->b_xflags = 0; + bp->b_flags = 0; + bp->b_error = 0; + BUF_LOCK(bp, LK_EXCLUSIVE); } /* @@ -448,8 +452,7 @@ relpbuf(bp, pfreecnt) if (bp->b_vp) pbrelvp(bp); - if (bp->b_flags & B_WANTED) - wakeup(bp); + BUF_UNLOCK(bp); TAILQ_INSERT_HEAD(&bswlist, bp, b_freelist); @@ -499,8 +502,8 @@ vm_pager_chain_iodone(struct buf *nbp) } nbp->b_chain.parent = NULL; --bp->b_chain.count; - if (bp->b_flags & B_WANTED) { - bp->b_flags &= ~B_WANTED; + if (bp->b_flags & B_WANT) { + bp->b_flags &= ~B_WANT; wakeup(bp); } if (!bp->b_chain.count && (bp->b_flags & B_AUTOCHAINDONE)) { @@ -513,7 +516,7 @@ vm_pager_chain_iodone(struct buf *nbp) } } nbp->b_flags |= B_DONE; - nbp->b_flags &= ~(B_ASYNC|B_WANTED); + nbp->b_flags &= ~B_ASYNC; relpbuf(nbp, NULL); } @@ -539,7 +542,7 @@ getchainbuf(struct buf *bp, struct vnode *vp, int flags) if (bp->b_chain.count > 4) waitchainbuf(bp, 4, 0); - nbp->b_flags = B_BUSY | B_CALL | (bp->b_flags & B_ORDERED) | flags; + nbp->b_flags = B_CALL | (bp->b_flags & B_ORDERED) | flags; nbp->b_rcred = nbp->b_wcred = proc0.p_ucred; nbp->b_iodone = vm_pager_chain_iodone; @@ -571,7 +574,7 @@ waitchainbuf(struct buf *bp, int count, int done) s = splbio(); while (bp->b_chain.count > count) { - bp->b_flags |= B_WANTED; + bp->b_flags |= B_WANT; tsleep(bp, PRIBIO + 4, "bpchain", 0); } if (done) { diff --git a/sys/vm/vm_swap.c b/sys/vm/vm_swap.c index aefeb77..5af762d 100644 --- a/sys/vm/vm_swap.c +++ b/sys/vm/vm_swap.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)vm_swap.c 8.5 (Berkeley) 2/17/94 - * $Id: vm_swap.c,v 1.70 1999/05/31 11:29:30 phk Exp $ + * $Id: vm_swap.c,v 1.71 1999/06/01 17:11:27 phk Exp $ */ #include "opt_devfs.h" @@ -116,7 +116,7 @@ int vm_swap_size; * * Perform swap strategy interleave device selection * - * The bp is expected to be B_BUSY and *not* B_DONE on call. + * The bp is expected to be locked and *not* B_DONE on call. */ static void diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 4488697..1115ba9 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -38,7 +38,7 @@ * SUCH DAMAGE. * * from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91 - * $Id: vnode_pager.c,v 1.109 1999/05/06 20:00:34 phk Exp $ + * $Id: vnode_pager.c,v 1.110 1999/05/15 23:42:39 dt Exp $ */ /* @@ -407,7 +407,7 @@ vnode_pager_input_smlfs(object, m) bp = getpbuf(&vnode_pbuf_freecnt); /* build a minimal buffer header */ - bp->b_flags = B_BUSY | B_READ | B_CALL; + bp->b_flags = B_READ | B_CALL; bp->b_iodone = vnode_pager_iodone; bp->b_rcred = bp->b_wcred = curproc->p_ucred; if (bp->b_rcred != NOCRED) @@ -722,7 +722,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) pmap_qenter(kva, m, count); /* build a minimal buffer header */ - bp->b_flags = B_BUSY | B_READ | B_CALL; + bp->b_flags = B_READ | B_CALL; bp->b_iodone = vnode_pager_iodone; /* B_PHYS is not set, but it is nice to fill this in */ bp->b_rcred = bp->b_wcred = curproc->p_ucred; |