diff options
| author | oster <oster@NetBSD.org> | 2006-01-07 16:08:44 +0000 |
|---|---|---|
| committer | oster <oster@NetBSD.org> | 2006-01-07 16:08:44 +0000 |
| commit | 55da57e0c1887e6fcfba3296fdc13f0686bc5c81 (patch) | |
| tree | eb24e21824b93cbf94cb2c26d6468cd21f2ae215 /sys/dev/raidframe | |
| parent | 11addaed4611fa933bdde2d47fe8a1483af4aacb (diff) | |
Remove the component buffer bits, now that I know there is a
"private" structure in struct buf that can be used to keep track of
the request associated with this buffer (the buffer used here is one
allocated from rf_CreateDiskQueueData(), so it's ours to do with what
we please). Shrinks code a little, reduces the run-time memory
footprint a bit, and simplifies both rf_DispatchKernelIO() and
KernelWakeupFunc().
Thanks to yamt for his "why is rf_DispatchKernelIO using another buf"
question which prompted me to revisit this code.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_netbsd.h | 3 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_netbsdkintf.c | 62 |
2 files changed, 11 insertions, 54 deletions
diff --git a/sys/dev/raidframe/rf_netbsd.h b/sys/dev/raidframe/rf_netbsd.h index 7ee021a7f92..0b3cbf7f9ca 100644 --- a/sys/dev/raidframe/rf_netbsd.h +++ b/sys/dev/raidframe/rf_netbsd.h @@ -1,4 +1,4 @@ -/* $NetBSD: rf_netbsd.h,v 1.25 2005/12/11 12:23:37 christos Exp $ */ +/* $NetBSD: rf_netbsd.h,v 1.26 2006/01/07 16:08:44 oster Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -68,7 +68,6 @@ struct RF_Pools_s { struct pool asmap; /* Access Stripe Map */ struct pool asmhle; /* Access Stripe Map Header List Elements */ struct pool callback; /* Callback descriptors */ - struct pool cbuf; /* Component buffers */ struct pool dagh; /* DAG headers */ struct pool dagnode; /* DAG nodes */ struct pool daglist; /* DAG lists */ diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c index 63cc2964e42..97b1e11bcca 100644 --- a/sys/dev/raidframe/rf_netbsdkintf.c +++ b/sys/dev/raidframe/rf_netbsdkintf.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_netbsdkintf.c,v 1.193 2006/01/04 04:56:41 oster Exp $ */ +/* $NetBSD: rf_netbsdkintf.c,v 1.194 2006/01/07 16:08:44 oster Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. * All rights reserved. @@ -146,7 +146,7 @@ ***********************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.193 2006/01/04 04:56:41 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.194 2006/01/07 16:08:44 oster Exp $"); #include <sys/param.h> #include <sys/errno.h> @@ -233,16 +233,6 @@ const struct cdevsw raid_cdevsw = { nostop, notty, nopoll, nommap, nokqfilter, D_DISK }; -/* - * Pilfered from ccd.c - */ - -struct raidbuf { - struct buf rf_buf; /* new I/O buf. MUST BE FIRST!!! */ - struct buf *rf_obp; /* ptr. to original I/O buf */ - RF_DiskQueueData_t *req;/* the request that this was part of.. */ -}; - /* XXX Not sure if the following should be replacing the raidPtrs above, or if it should be used in conjunction with that... */ @@ -358,11 +348,6 @@ raidattach(int num) panic("raidPtrs is NULL!!"); } - /* Initialize the component buffer pool. */ - rf_pool_init(&rf_pools.cbuf, sizeof(struct raidbuf), - "raidpl", num * RAIDOUTSTANDING, - 2 * num * RAIDOUTSTANDING); - rf_mutex_init(&rf_sparet_wait_mutex); rf_sparet_wait_queue = rf_sparet_resp_queue = NULL; @@ -1804,7 +1789,6 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) { int op = (req->type == RF_IO_TYPE_READ) ? B_READ : B_WRITE; struct buf *bp; - struct raidbuf *raidbp = NULL; req->queue = queue; @@ -1830,21 +1814,12 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) bp->b_error = 0; } #endif - raidbp = pool_get(&rf_pools.cbuf, PR_NOWAIT); - if (raidbp == NULL) { - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - return (ENOMEM); - } - BUF_INIT(&raidbp->rf_buf); /* * context for raidiodone */ - raidbp->rf_obp = bp; - raidbp->req = req; - BIO_COPYPRIO(&raidbp->rf_buf, bp); + bp->b_fspriv.bf_private = req; switch (req->type) { case RF_IO_TYPE_NOP: /* used primarily to unlock a locked queue */ @@ -1856,7 +1831,7 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) /* XXX need to glue the original buffer into this?? */ - KernelWakeupFunc(&raidbp->rf_buf); + KernelWakeupFunc(bp); break; case RF_IO_TYPE_READ: @@ -1866,7 +1841,7 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) RF_ETIMER_START(req->tracerec->timer); } #endif - InitBP(&raidbp->rf_buf, queue->rf_cinfo->ci_vp, + InitBP(bp, queue->rf_cinfo->ci_vp, op | bp->b_flags, queue->rf_cinfo->ci_dev, req->sectorOffset, req->numSector, req->buf, KernelWakeupFunc, (void *) req, @@ -1890,10 +1865,10 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) (int) (req->numSector << queue->raidPtr->logBytesPerSector), (int) queue->raidPtr->logBytesPerSector)); - if ((raidbp->rf_buf.b_flags & B_READ) == 0) { - raidbp->rf_buf.b_vp->v_numoutput++; + if ((bp->b_flags & B_READ) == 0) { + bp->b_vp->v_numoutput++; } - VOP_STRATEGY(raidbp->rf_buf.b_vp, &raidbp->rf_buf); + VOP_STRATEGY(bp->b_vp, bp); break; @@ -1908,32 +1883,18 @@ rf_DispatchKernelIO(RF_DiskQueue_t *queue, RF_DiskQueueData_t *req) kernel code. */ static void -KernelWakeupFunc(struct buf *vbp) +KernelWakeupFunc(struct buf *bp) { RF_DiskQueueData_t *req = NULL; RF_DiskQueue_t *queue; - struct raidbuf *raidbp = (struct raidbuf *) vbp; - struct buf *bp; int s; s = splbio(); db1_printf(("recovering the request queue:\n")); - req = raidbp->req; - - bp = raidbp->rf_obp; + req = bp->b_fspriv.bf_private; queue = (RF_DiskQueue_t *) req->queue; - if (raidbp->rf_buf.b_flags & B_ERROR) { - bp->b_flags |= B_ERROR; - bp->b_error = raidbp->rf_buf.b_error ? - raidbp->rf_buf.b_error : EIO; - } - - /* XXX methinks this could be wrong... */ -#if 1 - bp->b_resid = raidbp->rf_buf.b_resid; -#endif #if RF_ACC_TRACE > 0 if (req->tracerec) { RF_ETIMER_STOP(req->tracerec->timer); @@ -1945,7 +1906,6 @@ KernelWakeupFunc(struct buf *vbp) RF_UNLOCK_MUTEX(rf_tracing_mutex); } #endif - bp->b_bcount = raidbp->rf_buf.b_bcount; /* XXXX ?? */ /* XXX Ok, let's get aggressive... If B_ERROR is set, let's go * ballistic, and mark the component as hosed... */ @@ -1975,8 +1935,6 @@ KernelWakeupFunc(struct buf *vbp) } - pool_put(&rf_pools.cbuf, raidbp); - /* Fill in the error value */ req->error = (bp->b_flags & B_ERROR) ? bp->b_error : 0; |
