summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>1999-06-26 02:47:16 +0000
committermckusick <mckusick@FreeBSD.org>1999-06-26 02:47:16 +0000
commit5b58f2f951911f1075788268f99efccf1dba60eb (patch)
tree3f01ed42f71231eaa6a8cfa08b267634f1923fb1 /sys/vm
parent3213b13650cb2206bbd62b5b1764d148750f63a0 (diff)
downloadFreeBSD-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.c9
-rw-r--r--sys/vm/vm_pager.c21
-rw-r--r--sys/vm/vm_swap.c4
-rw-r--r--sys/vm/vnode_pager.c6
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;
OpenPOWER on IntegriCloud