From: Hans de Goede <hdego...@redhat.com>

Fix the uas_eh_bus_reset_handler not properly taking the usbdev lock
before calling usb_device_reset, the usb-core expects this lock to be
taken when usb_device_reset is called.

Signed-off-by: Hans de Goede <hdego...@redhat.com>
Signed-off-by: Sarah Sharp <sarah.a.sh...@linux.intel.com>
---
 drivers/usb/storage/uas.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index 6ad5de9639d5..36ef82a34131 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -804,6 +804,13 @@ static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
        struct usb_device *udev = devinfo->udev;
        int err;
 
+       err = usb_lock_device_for_reset(udev, devinfo->intf);
+       if (err) {
+               shost_printk(KERN_ERR, sdev->host,
+                            "%s FAILED to get lock err %d\n", __func__, err);
+               return FAILED;
+       }
+
        shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__);
        devinfo->resetting = 1;
        uas_abort_work(devinfo);
@@ -817,6 +824,8 @@ static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
                uas_configure_endpoints(devinfo);
        devinfo->resetting = 0;
 
+       usb_unlock_device(udev);
+
        if (err) {
                shost_printk(KERN_INFO, sdev->host, "%s FAILED\n", __func__);
                return FAILED;
-- 
1.8.5.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to