summaryrefslogtreecommitdiffstats
path: root/sys/dev/softraid.c
diff options
context:
space:
mode:
authormatthew <matthew@openbsd.org>2011-06-20 09:16:05 +0000
committermatthew <matthew@openbsd.org>2011-06-20 09:16:05 +0000
commita683e62a642d70130e8c461d9862fd437be8e024 (patch)
tree86342d7c7eb0b6f043c374ea9cb0b10e79b945a8 /sys/dev/softraid.c
parentUpdate mcd(4) to use disk_lock, etc. instead of its own tsleep(9) (diff)
downloadwireguard-openbsd-a683e62a642d70130e8c461d9862fd437be8e024.tar.xz
wireguard-openbsd-a683e62a642d70130e8c461d9862fd437be8e024.zip
Fix softraid(4) to set xs->cmd = &xs->cmdstore rather than pointing it
to a separately allocated SCSI command structure. ok marco@, jsing@
Diffstat (limited to 'sys/dev/softraid.c')
-rw-r--r--sys/dev/softraid.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/sys/dev/softraid.c b/sys/dev/softraid.c
index e3ffeae7994..3184189a57c 100644
--- a/sys/dev/softraid.c
+++ b/sys/dev/softraid.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: softraid.c,v 1.230 2011/05/03 17:08:51 matthew Exp $ */
+/* $OpenBSD: softraid.c,v 1.231 2011/06/20 09:16:05 matthew Exp $ */
/*
* Copyright (c) 2007, 2008, 2009 Marco Peereboom <marco@peereboom.us>
* Copyright (c) 2008 Chris Kuethe <ckuethe@openbsd.org>
@@ -3887,7 +3887,7 @@ sr_rebuild_thread(void *arg)
uint64_t mysize = 0;
struct sr_workunit *wu_r, *wu_w;
struct scsi_xfer xs_r, xs_w;
- struct scsi_rw_16 cr, cw;
+ struct scsi_rw_16 *cr, *cw;
int c, s, slept, percent = 0, old_percent = -1;
u_int8_t *buf;
@@ -3940,16 +3940,16 @@ sr_rebuild_thread(void *arg)
/* setup read io */
bzero(&xs_r, sizeof xs_r);
- bzero(&cr, sizeof cr);
xs_r.error = XS_NOERROR;
xs_r.flags = SCSI_DATA_IN;
xs_r.datalen = sz << DEV_BSHIFT;
xs_r.data = buf;
- xs_r.cmdlen = 16;
- cr.opcode = READ_16;
- _lto4b(sz, cr.length);
- _lto8b(lba, cr.addr);
- xs_r.cmd = (struct scsi_generic *)&cr;
+ xs_r.cmdlen = sizeof(*cr);
+ xs_r.cmd = &xs_r.cmdstore;
+ cr = (struct scsi_rw_16 *)xs_r.cmd;
+ cr->opcode = READ_16;
+ _lto4b(sz, cr->length);
+ _lto8b(lba, cr->addr);
wu_r->swu_flags |= SR_WUF_REBUILD;
wu_r->swu_xs = &xs_r;
if (sd->sd_scsi_rw(wu_r)) {
@@ -3960,16 +3960,16 @@ sr_rebuild_thread(void *arg)
/* setup write io */
bzero(&xs_w, sizeof xs_w);
- bzero(&cw, sizeof cw);
xs_w.error = XS_NOERROR;
xs_w.flags = SCSI_DATA_OUT;
xs_w.datalen = sz << DEV_BSHIFT;
xs_w.data = buf;
- xs_w.cmdlen = 16;
- cw.opcode = WRITE_16;
- _lto4b(sz, cw.length);
- _lto8b(lba, cw.addr);
- xs_w.cmd = (struct scsi_generic *)&cw;
+ xs_w.cmdlen = sizeof(*cw);
+ xs_w.cmd = &xs_w.cmdstore;
+ cw = (struct scsi_rw_16 *)xs_w.cmd;
+ cw->opcode = WRITE_16;
+ _lto4b(sz, cw->length);
+ _lto8b(lba, cw->addr);
wu_w->swu_flags |= SR_WUF_REBUILD;
wu_w->swu_xs = &xs_w;
if (sd->sd_scsi_rw(wu_w)) {