summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2010-01-12 08:33:20 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2010-01-12 08:33:20 +0000
commitb49e8d180cde1f19078ab76121300e67533adf90 (patch)
tree0f1748558d64e4eaa5a6d4ead53d7c3b2347f8ef
parent21ffd6f87ecdc6b955a0813afd8fc3a508a3163f (diff)
dont let the antisemaphore clear the WAITING flag so NO_CCB doesnt cause
us to loop forever. follow sdstart through to to an adapters scsi_cmd handler and assume that handler returns NO_CCB to enjoy the bug in full. ok kettenis@ krw@ beck@
-rw-r--r--sys/scsi/sd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c
index e07a7b1c006..8017da081e1 100644
--- a/sys/scsi/sd.c
+++ b/sys/scsi/sd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sd.c,v 1.179 2010/01/11 11:16:38 krw Exp $ */
+/* $OpenBSD: sd.c,v 1.180 2010/01/12 08:33:19 dlg Exp $ */
/* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */
/*-
@@ -704,8 +704,8 @@ sdstart(void *v)
return;
}
mtx_leave(&sc->sc_start_mtx);
-restart:
CLR(sc->flags, SDF_WAITING);
+restart:
while (!ISSET(sc->flags, SDF_WAITING) &&
(bp = sd_buf_dequeue(sc)) != NULL) {
/*