diff options
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_kintf.h | 3 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_netbsdkintf.c | 30 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_states.c | 10 |
3 files changed, 27 insertions, 16 deletions
diff --git a/sys/dev/raidframe/rf_kintf.h b/sys/dev/raidframe/rf_kintf.h index f8ba93e56cd..b96d0719fc8 100644 --- a/sys/dev/raidframe/rf_kintf.h +++ b/sys/dev/raidframe/rf_kintf.h @@ -1,4 +1,4 @@ -/* $NetBSD: rf_kintf.h,v 1.14 2000/06/04 02:05:13 oster Exp $ */ +/* $NetBSD: rf_kintf.h,v 1.15 2000/10/20 02:24:45 oster Exp $ */ /* * rf_kintf.h * @@ -54,4 +54,5 @@ void raid_init_component_label(RF_Raid_t *, RF_ComponentLabel_t *); void rf_print_component_label(RF_ComponentLabel_t *); void rf_UnconfigureVnodes( RF_Raid_t * ); void rf_close_component( RF_Raid_t *, struct vnode *, int); +void rf_disk_unbusy(RF_RaidAccessDesc_t *); #endif /* _RF__RF_KINTF_H_ */ diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c index 6d328b247dc..556d076728d 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.98 2000/10/17 03:39:41 oster Exp $ */ +/* $NetBSD: rf_netbsdkintf.c,v 1.99 2000/10/20 02:24:45 oster Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. * All rights reserved. @@ -142,6 +142,7 @@ #include "rf_copyback.h" #include "rf_dag.h" #include "rf_dagflags.h" +#include "rf_desc.h" #include "rf_diskqueue.h" #include "rf_acctrace.h" #include "rf_etimer.h" @@ -1671,12 +1672,13 @@ raidstart(raidPtr) */ do_async = 1; - /* don't ever condition on bp->b_flags & B_WRITE. - * always condition on B_READ instead */ - + disk_busy(&rs->sc_dkdev); + /* XXX we're still at splbio() here... do we *really* need to be? */ + /* don't ever condition on bp->b_flags & B_WRITE. + * always condition on B_READ instead */ retcode = rf_DoAccess(raidPtr, (bp->b_flags & B_READ) ? RF_IO_TYPE_READ : RF_IO_TYPE_WRITE, @@ -1724,9 +1726,6 @@ rf_DispatchKernelIO(queue, req) } rs = &raid_softc[unit]; - /* XXX is this the right place? */ - disk_busy(&rs->sc_dkdev); - bp = req->bp; #if 1 /* XXX when there is a physical disk failure, someone is passing us a @@ -1881,12 +1880,6 @@ KernelWakeupFunc(vbp) rs = &raid_softc[unit]; RAIDPUTBUF(rs, raidbp); - - if (bp->b_resid == 0) { - /* XXX is this the right place for a disk_unbusy()??!??!?!? */ - disk_unbusy(&rs->sc_dkdev, (bp->b_bcount - bp->b_resid)); - } - rf_DiskIOComplete(queue, req, (bp->b_flags & B_ERROR) ? 1 : 0); (req->CompleteFunc) (req->argument, (bp->b_flags & B_ERROR) ? 1 : 0); @@ -3292,3 +3285,14 @@ rf_auto_config_set(cset,unit) *unit = raidID; return(retcode); } + +void +rf_disk_unbusy(desc) + RF_RaidAccessDesc_t *desc; +{ + struct buf *bp; + + bp = (struct buf *)desc->bp; + disk_unbusy(&raid_softc[desc->raidPtr->raidid].sc_dkdev, + (bp->b_bcount - bp->b_resid)); +} diff --git a/sys/dev/raidframe/rf_states.c b/sys/dev/raidframe/rf_states.c index a449a603089..d612b9a5b47 100644 --- a/sys/dev/raidframe/rf_states.c +++ b/sys/dev/raidframe/rf_states.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_states.c,v 1.14 2000/10/12 03:28:49 oster Exp $ */ +/* $NetBSD: rf_states.c,v 1.15 2000/10/20 02:24:45 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -201,7 +201,13 @@ rf_State_LastState(RF_RaidAccessDesc_t * desc) */ if (desc->async_flag == 0) wakeup(desc->bp); - + + /* + * That's all the IO for this one... unbusy the 'disk'. + */ + + rf_disk_unbusy(desc); + /* * Wakeup any requests waiting to go. */ |
