Merge 4.13-rc5 into usb-next
This gets the USB fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -124,9 +124,9 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x9999,
|
||||
/* Reported-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> */
|
||||
UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999,
|
||||
"Initio Corporation",
|
||||
"",
|
||||
"INIC-3069",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_ATA_1X),
|
||||
US_FL_NO_ATA_1X | US_FL_IGNORE_RESIDUE),
|
||||
|
||||
/* Reported-by: Tom Arild Naess <tanaess@gmail.com> */
|
||||
UNUSUAL_DEV(0x152d, 0x0539, 0x0000, 0x9999,
|
||||
|
@@ -315,6 +315,7 @@ static int usb_stor_control_thread(void * __us)
|
||||
{
|
||||
struct us_data *us = (struct us_data *)__us;
|
||||
struct Scsi_Host *host = us_to_host(us);
|
||||
struct scsi_cmnd *srb;
|
||||
|
||||
for (;;) {
|
||||
usb_stor_dbg(us, "*** thread sleeping\n");
|
||||
@@ -330,6 +331,7 @@ static int usb_stor_control_thread(void * __us)
|
||||
scsi_lock(host);
|
||||
|
||||
/* When we are called with no command pending, we're done */
|
||||
srb = us->srb;
|
||||
if (us->srb == NULL) {
|
||||
scsi_unlock(host);
|
||||
mutex_unlock(&us->dev_mutex);
|
||||
@@ -398,14 +400,11 @@ static int usb_stor_control_thread(void * __us)
|
||||
/* lock access to the state */
|
||||
scsi_lock(host);
|
||||
|
||||
/* indicate that the command is done */
|
||||
if (us->srb->result != DID_ABORT << 16) {
|
||||
usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
|
||||
us->srb->result);
|
||||
us->srb->scsi_done(us->srb);
|
||||
} else {
|
||||
/* was the command aborted? */
|
||||
if (us->srb->result == DID_ABORT << 16) {
|
||||
SkipForAbort:
|
||||
usb_stor_dbg(us, "scsi command aborted\n");
|
||||
srb = NULL; /* Don't call srb->scsi_done() */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -429,6 +428,13 @@ SkipForAbort:
|
||||
|
||||
/* unlock the device pointers */
|
||||
mutex_unlock(&us->dev_mutex);
|
||||
|
||||
/* now that the locks are released, notify the SCSI core */
|
||||
if (srb) {
|
||||
usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
|
||||
srb->result);
|
||||
srb->scsi_done(srb);
|
||||
}
|
||||
} /* for (;;) */
|
||||
|
||||
/* Wait until we are told to stop */
|
||||
|
Reference in New Issue
Block a user