summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authortedu <tedu@openbsd.org>2004-02-15 02:45:46 +0000
committertedu <tedu@openbsd.org>2004-02-15 02:45:46 +0000
commit35fa4c39e7e446b9e461e0899753548be778d66a (patch)
tree65098d9e27fadd6ea99b2eb7e25f05c6322f5515 /sys
parentbreak in default switch cases (diff)
downloadwireguard-openbsd-35fa4c39e7e446b9e461e0899753548be778d66a.tar.xz
wireguard-openbsd-35fa4c39e7e446b9e461e0899753548be778d66a.zip
new arg to disk_unbusy, to record separate read/write statistics.
looked at by various, testing henning@ mcbride@ dan weeks mostly from netbsd via Pedro Martelletto <pbastos@rdc.puc-rio.br>
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/sparc/dev/fd.c7
-rw-r--r--sys/arch/sparc/dev/xd.c8
-rw-r--r--sys/arch/sparc/dev/xy.c8
-rw-r--r--sys/arch/vax/mba/hp.c5
-rw-r--r--sys/arch/vax/mscp/mscp_disk.c12
-rw-r--r--sys/dev/ata/wd.c5
-rw-r--r--sys/dev/ccd.c5
-rw-r--r--sys/dev/isa/fd.c7
-rw-r--r--sys/dev/isa/mcd.c4
-rw-r--r--sys/dev/ofw/ofdisk.c5
-rw-r--r--sys/dev/raidframe/rf_openbsdkintf.c5
-rw-r--r--sys/dev/vnd.c22
-rw-r--r--sys/kern/kern_sysctl.c18
-rw-r--r--sys/kern/subr_disk.c24
-rw-r--r--sys/scsi/cd.c7
-rw-r--r--sys/scsi/sd.c7
-rw-r--r--sys/sys/disk.h19
17 files changed, 103 insertions, 65 deletions
diff --git a/sys/arch/sparc/dev/fd.c b/sys/arch/sparc/dev/fd.c
index 99de2dfe043..64b520ad889 100644
--- a/sys/arch/sparc/dev/fd.c
+++ b/sys/arch/sparc/dev/fd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fd.c,v 1.34 2004/01/12 11:35:08 jmc Exp $ */
+/* $OpenBSD: fd.c,v 1.35 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: fd.c,v 1.51 1997/05/24 20:16:19 pk Exp $ */
/*-
@@ -1363,7 +1363,7 @@ loop:
}
/*FALLTHROUGH*/
case SEEKCOMPLETE:
- disk_unbusy(&fd->sc_dk, 0); /* no data on seek */
+ disk_unbusy(&fd->sc_dk, 0, 0); /* no data on seek */
/* Make sure seek really happened. */
if (fdc->sc_nstat != 2 || (st0 & 0xf8) != 0x20 ||
@@ -1391,7 +1391,8 @@ loop:
case IOCOMPLETE: /* IO DONE, post-analyze */
timeout_del(&fdc->fdctimeout_to);
- disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
+ disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
if (fdc->sc_nstat != 7 || st1 != 0 ||
((st0 & 0xf8) != 0 &&
diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c
index 447a4dae08b..cf175036bd7 100644
--- a/sys/arch/sparc/dev/xd.c
+++ b/sys/arch/sparc/dev/xd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xd.c,v 1.27 2004/01/12 11:35:08 jmc Exp $ */
+/* $OpenBSD: xd.c,v 1.28 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: xd.c,v 1.37 1997/07/29 09:58:16 fair Exp $ */
/*
@@ -1738,7 +1738,8 @@ xdc_reset(xdcsc, quiet, blastmode, error, xdsc)
iorq->buf->b_bcount);
disk_unbusy(&xdcsc->reqs[lcv].xd->sc_dk,
(xdcsc->reqs[lcv].buf->b_bcount -
- xdcsc->reqs[lcv].buf->b_resid));
+ xdcsc->reqs[lcv].buf->b_resid),
+ (xdcsc->reqs[lcv].buf->b_flags & B_READ));
biodone(iorq->buf);
XDC_FREE(xdcsc, lcv); /* add to free list */
break;
@@ -1943,7 +1944,8 @@ xdc_remove_iorq(xdcsc)
(vaddr_t) bp->b_un.b_addr,
bp->b_bcount);
disk_unbusy(&iorq->xd->sc_dk,
- (bp->b_bcount - bp->b_resid));
+ (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
XDC_FREE(xdcsc, rqno);
biodone(bp);
break;
diff --git a/sys/arch/sparc/dev/xy.c b/sys/arch/sparc/dev/xy.c
index 29411e8da2d..f651417287a 100644
--- a/sys/arch/sparc/dev/xy.c
+++ b/sys/arch/sparc/dev/xy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xy.c,v 1.23 2003/09/29 09:08:19 miod Exp $ */
+/* $OpenBSD: xy.c,v 1.24 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: xy.c,v 1.26 1997/07/19 21:43:56 pk Exp $ */
/*
@@ -1644,7 +1644,8 @@ xyc_reset(xycsc, quiet, blastmode, error, xysc)
iorq->xy->xyq.b_actf = iorq->buf->b_actf;
disk_unbusy(&xycsc->reqs[lcv].xy->sc_dk,
(xycsc->reqs[lcv].buf->b_bcount -
- xycsc->reqs[lcv].buf->b_resid));
+ xycsc->reqs[lcv].buf->b_resid),
+ (xycsc->reqs[lcv].buf->b_flags & B_READ));
biodone(iorq->buf);
iorq->mode = XY_SUB_FREE;
break;
@@ -1821,7 +1822,8 @@ xyc_remove_iorq(xycsc)
bp->b_bcount);
iorq->xy->xyq.b_actf = bp->b_actf;
disk_unbusy(&iorq->xy->sc_dk,
- (bp->b_bcount - bp->b_resid));
+ (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
iorq->mode = XY_SUB_FREE;
biodone(bp);
break;
diff --git a/sys/arch/vax/mba/hp.c b/sys/arch/vax/mba/hp.c
index d156a49a41e..e0f8a55521d 100644
--- a/sys/arch/vax/mba/hp.c
+++ b/sys/arch/vax/mba/hp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: hp.c,v 1.14 2003/04/06 22:01:41 miod Exp $ */
+/* $OpenBSD: hp.c,v 1.15 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: hp.c,v 1.22 2000/02/12 16:09:33 ragge Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
@@ -416,7 +416,8 @@ hper2:
sc->sc_dev.dv_xname, mbasr);
BUFQ_FIRST(&md->md_q)->b_resid = 0;
- disk_unbusy(&sc->sc_disk, BUFQ_FIRST(&md->md_q)->b_bcount);
+ disk_unbusy(&sc->sc_disk, BUFQ_FIRST(&md->md_q)->b_bcount,
+ (BUFQ_FIRST(&md->md_q)->b_flags & B_READ));
return XFER_FINISH;
}
diff --git a/sys/arch/vax/mscp/mscp_disk.c b/sys/arch/vax/mscp/mscp_disk.c
index 5e54596af1f..8b059ea14fd 100644
--- a/sys/arch/vax/mscp/mscp_disk.c
+++ b/sys/arch/vax/mscp/mscp_disk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mscp_disk.c,v 1.13 2003/06/02 23:27:57 millert Exp $ */
+/* $OpenBSD: mscp_disk.c,v 1.14 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: mscp_disk.c,v 1.30 2001/11/13 07:38:28 lukem Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
@@ -324,8 +324,9 @@ rastrategy(bp)
goto done;
/* Make some statistics... /bqt */
- ra->ra_disk.dk_xfer++;
- ra->ra_disk.dk_bytes += bp->b_bcount;
+ s = splbio();
+ disk_busy(&ra->ra_disk);
+ splx(s);
mscp_strategy(bp, ra->ra_dev.dv_parent);
return;
@@ -707,8 +708,9 @@ rxstrategy(bp)
}
/* Make some statistics... /bqt */
- rx->ra_disk.dk_xfer++;
- rx->ra_disk.dk_bytes += bp->b_bcount;
+ s = splbio();
+ disk_busy(&rx->ra_disk);
+ splx(s);
mscp_strategy(bp, rx->ra_dev.dv_parent);
return;
diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c
index bb65c803715..79b39710eb8 100644
--- a/sys/dev/ata/wd.c
+++ b/sys/dev/ata/wd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wd.c,v 1.38 2004/02/02 21:29:38 tedu Exp $ */
+/* $OpenBSD: wd.c,v 1.39 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: wd.c,v 1.193 1999/02/28 17:15:27 explorer Exp $ */
/*
@@ -648,7 +648,8 @@ noerror: if ((wd->sc_wdc_bio.flags & ATA_CORR) || wd->retries > 0)
printf("%s: soft error (corrected)\n",
wd->sc_dev.dv_xname);
}
- disk_unbusy(&wd->sc_dk, (bp->b_bcount - bp->b_resid));
+ disk_unbusy(&wd->sc_dk, (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
#if NRND > 0
rnd_add_uint32(&wd->rnd_source, bp->b_blkno);
#endif
diff --git a/sys/dev/ccd.c b/sys/dev/ccd.c
index eaac7b55473..9d1740c3657 100644
--- a/sys/dev/ccd.c
+++ b/sys/dev/ccd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ccd.c,v 1.54 2004/01/09 21:32:23 brad Exp $ */
+/* $OpenBSD: ccd.c,v 1.55 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: ccd.c,v 1.33 1996/05/05 04:21:14 thorpej Exp $ */
/*-
@@ -1013,7 +1013,8 @@ ccdintr(cs, bp)
*/
if (bp->b_flags & B_ERROR)
bp->b_resid = bp->b_bcount;
- disk_unbusy(&cs->sc_dkdev, (bp->b_bcount - bp->b_resid));
+ disk_unbusy(&cs->sc_dkdev, (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
biodone(bp);
}
diff --git a/sys/dev/isa/fd.c b/sys/dev/isa/fd.c
index e2bf5977b2c..1f0d6ce9572 100644
--- a/sys/dev/isa/fd.c
+++ b/sys/dev/isa/fd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fd.c,v 1.47 2003/06/02 23:28:02 millert Exp $ */
+/* $OpenBSD: fd.c,v 1.48 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: fd.c,v 1.90 1996/05/12 23:12:03 mycroft Exp $ */
/*-
@@ -771,7 +771,7 @@ loop:
return 1;
case SEEKCOMPLETE:
- disk_unbusy(&fd->sc_dk, 0); /* no data on seek */
+ disk_unbusy(&fd->sc_dk, 0, 0); /* no data on seek */
/* Make sure seek really happened. */
out_fdc(iot, ioh, NE7CMD_SENSEI);
@@ -797,7 +797,8 @@ loop:
case IOCOMPLETE: /* IO DONE, post-analyze */
timeout_del(&fd->fdtimeout_to);
- disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid));
+ disk_unbusy(&fd->sc_dk, (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
if (fdcresult(fdc) != 7 || (st0 & 0xf8) != 0) {
isadma_abort(fdc->sc_drq);
diff --git a/sys/dev/isa/mcd.c b/sys/dev/isa/mcd.c
index e8f3a57205a..bc66a2839ba 100644
--- a/sys/dev/isa/mcd.c
+++ b/sys/dev/isa/mcd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mcd.c,v 1.32 2003/04/06 15:28:25 krw Exp $ */
+/* $OpenBSD: mcd.c,v 1.33 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: mcd.c,v 1.60 1998/01/14 12:14:41 drochner Exp $ */
/*
@@ -1241,7 +1241,7 @@ mcdintr(arg)
/* Return buffer. */
bp->b_resid = 0;
- disk_unbusy(&sc->sc_dk, bp->b_bcount);
+ disk_unbusy(&sc->sc_dk, bp->b_bcount, (bp->b_flags & B_READ));
biodone(bp);
mcdstart(sc);
diff --git a/sys/dev/ofw/ofdisk.c b/sys/dev/ofw/ofdisk.c
index 489766c9dbe..7eb875e3ddc 100644
--- a/sys/dev/ofw/ofdisk.c
+++ b/sys/dev/ofw/ofdisk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ofdisk.c,v 1.7 2003/04/06 18:54:20 ho Exp $ */
+/* $OpenBSD: ofdisk.c,v 1.8 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: ofdisk.c,v 1.3 1996/10/13 01:38:13 christos Exp $ */
/*
@@ -270,7 +270,8 @@ ofdstrategy(bp)
} else
bp->b_resid = bp->b_bcount - read;
- disk_unbusy(&of->sc_dk, bp->b_bcount - bp->b_resid);
+ disk_unbusy(&of->sc_dk, bp->b_bcount - bp->b_resid,
+ (bp->b_flags & B_READ));
done:
s = splbio();
diff --git a/sys/dev/raidframe/rf_openbsdkintf.c b/sys/dev/raidframe/rf_openbsdkintf.c
index 24f5d0c3eef..059e87de4dd 100644
--- a/sys/dev/raidframe/rf_openbsdkintf.c
+++ b/sys/dev/raidframe/rf_openbsdkintf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rf_openbsdkintf.c,v 1.25 2004/01/14 20:50:49 miod Exp $ */
+/* $OpenBSD: rf_openbsdkintf.c,v 1.26 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: rf_netbsdkintf.c,v 1.109 2001/07/27 03:30:07 oster Exp $ */
/*-
@@ -3563,5 +3563,6 @@ rf_disk_unbusy(RF_RaidAccessDesc_t *desc)
bp = (struct buf *)desc->bp;
disk_unbusy(&raid_softc[desc->raidPtr->raidid].sc_dkdev,
- (bp->b_bcount - bp->b_resid));
+ (bp->b_bcount - bp->b_resid),
+ (bp->b_flags & B_READ));
}
diff --git a/sys/dev/vnd.c b/sys/dev/vnd.c
index b9db2b4c385..3258fb7fc80 100644
--- a/sys/dev/vnd.c
+++ b/sys/dev/vnd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vnd.c,v 1.41 2003/10/17 23:05:39 tedu Exp $ */
+/* $OpenBSD: vnd.c,v 1.42 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: vnd.c,v 1.26 1996/03/30 23:06:11 christos Exp $ */
/*
@@ -651,7 +651,6 @@ vndiodone(bp)
struct vndbuf *vbp = (struct vndbuf *) bp;
struct buf *pbp = vbp->vb_obp;
struct vnd_softc *vnd = &vnd_softc[vndunit(pbp->b_dev)];
- long count;
splassert(IPL_BIO);
@@ -673,21 +672,22 @@ vndiodone(bp)
}
pbp->b_resid -= vbp->vb_buf.b_bcount;
putvndbuf(vbp);
- count = pbp->b_bcount - pbp->b_resid;
- if (pbp->b_resid == 0) {
-#ifdef DEBUG
- if (vnddebug & VDB_IO)
- printf("vndiodone: pbp %p iodone\n", pbp);
-#endif
- biodone(pbp);
- }
if (vnd->sc_tab.b_active) {
- disk_unbusy(&vnd->sc_dk, count);
+ disk_unbusy(&vnd->sc_dk, (pbp->b_bcount - pbp->b_resid),
+ (pbp->b_flags & B_READ));
if (vnd->sc_tab.b_actf)
vndstart(vnd);
else
vnd->sc_tab.b_active--;
}
+ if (pbp->b_resid == 0) {
+#ifdef DEBUG
+ if (vnddebug & VDB_IO)
+ printf("vndiodone: pbp %p iodone\n", pbp);
+#endif
+ biodone(pbp);
+ }
+
}
/* ARGSUSED */
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 68685933775..a3cbe801bb6 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_sysctl.c,v 1.99 2004/02/14 15:09:22 grange Exp $ */
+/* $OpenBSD: kern_sysctl.c,v 1.100 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */
/*-
@@ -1528,10 +1528,14 @@ sysctl_diskinit(update, p)
dk->dk_name ? dk->dk_name : "");
l += strlen(disknames + l);
sdk = diskstats + i;
+ strlcpy(sdk->ds_name, dk->dk_name,
+ sizeof(sdk->ds_name));
sdk->ds_busy = dk->dk_busy;
- sdk->ds_xfer = dk->dk_xfer;
+ sdk->ds_rxfer = dk->dk_rxfer;
+ sdk->ds_wxfer = dk->dk_wxfer;
sdk->ds_seek = dk->dk_seek;
- sdk->ds_bytes = dk->dk_bytes;
+ sdk->ds_rbytes = dk->dk_rbytes;
+ sdk->ds_wbytes = dk->dk_wbytes;
sdk->ds_attachtime = dk->dk_attachtime;
sdk->ds_timestamp = dk->dk_timestamp;
sdk->ds_time = dk->dk_time;
@@ -1546,10 +1550,14 @@ sysctl_diskinit(update, p)
for (dk = TAILQ_FIRST(&disklist), i = 0; dk;
dk = TAILQ_NEXT(dk, dk_link), i++) {
sdk = diskstats + i;
+ strlcpy(sdk->ds_name, dk->dk_name,
+ sizeof(sdk->ds_name));
sdk->ds_busy = dk->dk_busy;
- sdk->ds_xfer = dk->dk_xfer;
+ sdk->ds_rxfer = dk->dk_rxfer;
+ sdk->ds_wxfer = dk->dk_wxfer;
sdk->ds_seek = dk->dk_seek;
- sdk->ds_bytes = dk->dk_bytes;
+ sdk->ds_rbytes = dk->dk_rbytes;
+ sdk->ds_wbytes = dk->dk_wbytes;
sdk->ds_attachtime = dk->dk_attachtime;
sdk->ds_timestamp = dk->dk_timestamp;
sdk->ds_time = dk->dk_time;
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index 7802ac73801..9ad79738878 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: subr_disk.c,v 1.24 2004/01/21 21:00:14 tedu Exp $ */
+/* $OpenBSD: subr_disk.c,v 1.25 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: subr_disk.c,v 1.17 1996/03/16 23:17:08 christos Exp $ */
/*
@@ -371,9 +371,10 @@ disk_busy(diskp)
* time, and reset the timestamp.
*/
void
-disk_unbusy(diskp, bcount)
+disk_unbusy(diskp, bcount, read)
struct disk *diskp;
long bcount;
+ int read;
{
int s;
struct timeval dv_time, diff_time;
@@ -390,10 +391,15 @@ disk_unbusy(diskp, bcount)
diskp->dk_timestamp = dv_time;
if (bcount > 0) {
- diskp->dk_bytes += bcount;
- diskp->dk_xfer++;
- }
- diskp->dk_seek++;
+ if (read) {
+ diskp->dk_rbytes += bcount;
+ diskp->dk_rxfer++;
+ } else {
+ diskp->dk_wbytes += bcount;
+ diskp->dk_wxfer++;
+ }
+ } else
+ diskp->dk_seek++;
add_disk_randomness(bcount ^ diff_time.tv_usec);
}
@@ -430,8 +436,10 @@ disk_resetstat(diskp)
{
int s = splbio(), t;
- diskp->dk_xfer = 0;
- diskp->dk_bytes = 0;
+ diskp->dk_rxfer = 0;
+ diskp->dk_rbytes = 0;
+ diskp->dk_wxfer = 0;
+ diskp->dk_wbytes = 0;
diskp->dk_seek = 0;
t = splclock();
diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c
index 6736c67350e..fd441cad760 100644
--- a/sys/scsi/cd.c
+++ b/sys/scsi/cd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cd.c,v 1.73 2003/11/07 10:16:46 jmc Exp $ */
+/* $OpenBSD: cd.c,v 1.74 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */
/*
@@ -705,7 +705,7 @@ cdstart(v)
(u_char *) bp->b_data, bp->b_bcount,
CDRETRIES, 30000, bp, SCSI_NOSLEEP |
((bp->b_flags & B_READ) ? SCSI_DATA_IN : SCSI_DATA_OUT))) {
- disk_unbusy(&cd->sc_dk, 0);
+ disk_unbusy(&cd->sc_dk, 0, 0);
printf("%s: not queued", cd->sc_dev.dv_xname);
}
}
@@ -718,7 +718,8 @@ cddone(xs)
struct cd_softc *cd = xs->sc_link->device_softc;
if (xs->bp != NULL)
- disk_unbusy(&cd->sc_dk, xs->bp->b_bcount - xs->bp->b_resid);
+ disk_unbusy(&cd->sc_dk, xs->bp->b_bcount - xs->bp->b_resid,
+ (xs->bp->b_flags & B_READ));
}
void
diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c
index de69457d985..a1ad171164e 100644
--- a/sys/scsi/sd.c
+++ b/sys/scsi/sd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sd.c,v 1.65 2004/01/25 21:51:18 krw Exp $ */
+/* $OpenBSD: sd.c,v 1.66 2004/02/15 02:45:47 tedu Exp $ */
/* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */
/*-
@@ -751,7 +751,7 @@ sdstart(v)
SDRETRIES, 60000, bp, SCSI_NOSLEEP |
((bp->b_flags & B_READ) ? SCSI_DATA_IN : SCSI_DATA_OUT));
if (error) {
- disk_unbusy(&sd->sc_dk, 0);
+ disk_unbusy(&sd->sc_dk, 0, 0);
printf("%s: not queued, error %d\n",
sd->sc_dev.dv_xname, error);
}
@@ -770,7 +770,8 @@ sddone(xs)
}
if (xs->bp != NULL)
- disk_unbusy(&sd->sc_dk, (xs->bp->b_bcount - xs->bp->b_resid));
+ disk_unbusy(&sd->sc_dk, (xs->bp->b_bcount - xs->bp->b_resid),
+ (xs->bp->b_flags & B_READ));
}
void
diff --git a/sys/sys/disk.h b/sys/sys/disk.h
index f3b6394894e..faee1a48995 100644
--- a/sys/sys/disk.h
+++ b/sys/sys/disk.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: disk.h,v 1.11 2003/06/02 23:28:21 millert Exp $ */
+/* $OpenBSD: disk.h,v 1.12 2004/02/15 02:45:46 tedu Exp $ */
/* $NetBSD: disk.h,v 1.11 1996/04/28 20:22:50 thorpej Exp $ */
/*
@@ -56,11 +56,16 @@ struct buf;
struct disklabel;
struct cpu_disklabel;
+#define DS_DISKNAMELEN 16
+
struct diskstats {
+ char ds_name[DS_DISKNAMELEN];
int ds_busy; /* busy counter */
- u_int64_t ds_xfer; /* total number of transfers */
+ u_int64_t ds_rxfer; /* total number of read transfers */
+ u_int64_t ds_wxfer; /* total number of write transfers */
u_int64_t ds_seek; /* total independent seek operations */
- u_int64_t ds_bytes; /* total bytes transferred */
+ u_int64_t ds_rbytes; /* total bytes read */
+ u_int64_t ds_wbytes; /* total bytes written */
struct timeval ds_attachtime; /* time disk was attached */
struct timeval ds_timestamp; /* timestamp of last unbusy */
struct timeval ds_time; /* total time spent busy */
@@ -78,9 +83,11 @@ struct disk {
* on certain types of disks.
*/
int dk_busy; /* busy counter */
- u_int64_t dk_xfer; /* total number of transfers */
+ u_int64_t dk_rxfer; /* total number of read transfers */
+ u_int64_t dk_wxfer; /* total number of write transfers */
u_int64_t dk_seek; /* total independent seek operations */
- u_int64_t dk_bytes; /* total bytes transferred */
+ u_int64_t dk_rbytes; /* total bytes read */
+ u_int64_t dk_wbytes; /* total bytes written */
struct timeval dk_attachtime; /* time disk was attached */
struct timeval dk_timestamp; /* timestamp of last unbusy */
struct timeval dk_time; /* total time spent busy */
@@ -154,7 +161,7 @@ int disk_construct(struct disk *, char *);
void disk_attach(struct disk *);
void disk_detach(struct disk *);
void disk_busy(struct disk *);
-void disk_unbusy(struct disk *, long);
+void disk_unbusy(struct disk *, long, int);
void disk_resetstat(struct disk *);
struct disk *disk_find(char *);