summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2005-05-22 01:12:47 +0000
committerkrw <krw@openbsd.org>2005-05-22 01:12:47 +0000
commit6a752598eb6c21e58cb363ccedae66b6e8487db5 (patch)
tree4fe53098d98e799c178a55208046c53e5276e487
parentadd power hook (diff)
downloadwireguard-openbsd-6a752598eb6c21e58cb363ccedae66b6e8487db5.tar.xz
wireguard-openbsd-6a752598eb6c21e58cb363ccedae66b6e8487db5.zip
Check if the scsi_request has been released in the COMPLETE case as
was already done in the SUCCESSFULLY_QUEUED case. Shouldn't happen, but better safe than sorry if some driver completes it's io immediately. Also don't recompute saved flags if the request is retried. ok marco@
-rw-r--r--sys/scsi/scsi_base.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c
index a8981675c1a..9aebd2227af 100644
--- a/sys/scsi/scsi_base.c
+++ b/sys/scsi/scsi_base.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scsi_base.c,v 1.68 2005/05/14 00:20:43 krw Exp $ */
+/* $OpenBSD: scsi_base.c,v 1.69 2005/05/22 01:12:47 krw Exp $ */
/* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */
/*
@@ -577,7 +577,6 @@ scsi_execute_xs(xs)
xs->resid = xs->datalen;
xs->status = 0;
-retry:
/*
* Do the transfer. If we are polling we will return:
* COMPLETE, Was poll, and scsi_done has been called
@@ -615,7 +614,7 @@ retry:
if ((flags & (SCSI_USER | SCSI_POLL)) == (SCSI_USER | SCSI_POLL))
panic("scsi_execute_xs: USER with POLL");
#endif
-
+retry:
switch ((*(xs->sc_link->adapter->scsi_cmd)) (xs)) {
case SUCCESSFULLY_QUEUED:
if ((flags & (SCSI_NOSLEEP | SCSI_POLL)) == SCSI_NOSLEEP)
@@ -629,6 +628,8 @@ retry:
tsleep(xs, PRIBIO + 1, "scsi_scsi_cmd", 0);
splx(s);
case COMPLETE: /* Polling command completed ok */
+ if ((flags & (SCSI_NOSLEEP | SCSI_POLL)) == SCSI_NOSLEEP)
+ return EJUSTRETURN;
if (xs->bp)
return EJUSTRETURN;
doit: