From NetBSD: (required for last change to scsi_base.c in case we get
authorbriggs <briggs@openbsd.org>
Sun, 14 Jan 1996 21:44:26 +0000 (21:44 +0000)
committerbriggs <briggs@openbsd.org>
Sun, 14 Jan 1996 21:44:26 +0000 (21:44 +0000)
commitd7e8962de162356bf5b196c06839b2e877be8839
tree66fc2d755436da092acb475c32bebf02ed73d364
parentbad9af954acf3a0b92a5c4feb80d626598f3a49e
From NetBSD: (required for last change to scsi_base.c in case we get
      "command aborted" status)
Handle cases like the following:
        - controller calls scsi_done() with error XS_TIMEOUT
        - scsi_done() calls sddone()
        - sddone() calls disk_unbusy()
        - scsi_done() calls controller to retry command (missing the
          call to disk_busy())
        - controller calls scsi_done()
        - scsi_done() calls sddone()
        - sddone() calls disk_busy(), which panics because of the imbalance.
Bug noticed by Leo Weppleman, who also suggested this fix; pass an additional
boolean argument ("complete") to the device's "done" routine, with a
value of `0' passed from the previous call to "done", and add an additional
call to "done" when the xfer resources are freed.
sys/scsi/cd.c
sys/scsi/scsi_base.c
sys/scsi/scsiconf.h
sys/scsi/sd.c