Message ID | 64608b5d-e90f-3839-eb80-7e3cd042a887@caviumnetworks.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Fri, 23 Dec 2016, George Cherian wrote: > >> 2) On disconnect I am seeing the following issue > >> > >> scsi host4: uas_post_reset: alloc streams error -19 after reset > >> sd 4:0:0:0: [sdb] Synchronizing SCSI cache > >> > >> This is more fatal because after these messages the USB port becomes > >> unusable. Even an lsusb invocation hangs for ever. > > This problem looks pretty simple. uas doesn't check properly to see if > > the device was disconnected following a reset. > > > > Try changing the line in uas_post_reset() that says: > > > > if (devinfo->shutdown) > > > > to: > > > > if (devinfo->shutdown || > > devinfo->udev->state == USB_STATE_NOTATTACHED) > Yes this works for me but with a little bit change as follows, But am > not sure whether we should goto reset_scsi in case of shutdown. > Please advice. > > diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c > index 5ef014b..24db3fd 100644 > --- a/drivers/usb/storage/uas.c > +++ b/drivers/usb/storage/uas.c > @@ -1072,8 +1072,8 @@ static int uas_post_reset(struct usb_interface *intf) > unsigned long flags; > int err; > > - if (devinfo->shutdown) > - return 0; > + if (devinfo->shutdown || devinfo->udev->state == > USB_STATE_NOTATTACHED) > + goto reset_scsi; > > err = uas_configure_endpoints(devinfo); > if (err) { > @@ -1083,6 +1083,7 @@ static int uas_post_reset(struct usb_interface *intf) > return 1; > } > > +reset_scsi: > spin_lock_irqsave(shost->host_lock, flags); > scsi_report_bus_reset(shost, 0); > spin_unlock_irqrestore(shost->host_lock, flags); As far as I can tell, adding the "goto reset_scsi" line does not help at all. There's no reason to report that the bus has been reset after the device is gone. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c index 5ef014b..24db3fd 100644 --- a/drivers/usb/storage/uas.c +++ b/drivers/usb/storage/uas.c @@ -1072,8 +1072,8 @@ static int uas_post_reset(struct usb_interface *intf) unsigned long flags; int err; - if (devinfo->shutdown) - return 0; + if (devinfo->shutdown || devinfo->udev->state == USB_STATE_NOTATTACHED) + goto reset_scsi; err = uas_configure_endpoints(devinfo);