aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ips/ips_disk.c
diff options
context:
space:
mode:
authorScott Long <scottl@FreeBSD.org>2004-02-28 19:14:41 +0000
committerScott Long <scottl@FreeBSD.org>2004-02-28 19:14:41 +0000
commitb234a120c867ff3291e66666644af78f7a894095 (patch)
tree9838032cf77c78cc90c2abba229573c0ab89c327 /sys/dev/ips/ips_disk.c
parent46a51869c20086348059fae18ac57492f2d061bf (diff)
Notes
Diffstat (limited to 'sys/dev/ips/ips_disk.c')
-rw-r--r--sys/dev/ips/ips_disk.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/ips/ips_disk.c b/sys/dev/ips/ips_disk.c
index f20a8f8f40c8..87b848e60dea 100644
--- a/sys/dev/ips/ips_disk.c
+++ b/sys/dev/ips/ips_disk.c
@@ -79,6 +79,9 @@ static int ipsd_close(struct disk *dp)
/* ipsd_finish is called to clean up and return a completed IO request */
void ipsd_finish(struct bio *iobuf)
{
+ ipsdisk_softc_t *dsc;
+ dsc = iobuf->bio_disk->d_drv1;
+
if (iobuf->bio_flags & BIO_ERROR) {
ipsdisk_softc_t *dsc;
dsc = iobuf->bio_disk->d_drv1;
@@ -87,6 +90,7 @@ void ipsd_finish(struct bio *iobuf)
iobuf->bio_resid = 0;
biodone(iobuf);
+ ips_start_io_request(dsc->sc);
}
@@ -97,7 +101,10 @@ static void ipsd_strategy(struct bio *iobuf)
dsc = iobuf->bio_disk->d_drv1;
DEVICE_PRINTF(8,dsc->dev,"in strategy\n");
iobuf->bio_driver1 = (void *)(uintptr_t)dsc->sc->drives[dsc->disk_number].drivenum;
- ips_start_io_request(dsc->sc, iobuf);
+ mtx_lock(&dsc->sc->queue_mtx);
+ bioq_disksort(&dsc->sc->queue, iobuf);
+ mtx_unlock(&dsc->sc->queue_mtx);
+ ips_start_io_request(dsc->sc);
}
static int ipsd_probe(device_t dev)
@@ -161,4 +168,3 @@ static int ipsd_detach(device_t dev)
disk_destroy(dsc->ipsd_disk);
return 0;
}
-