aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2013-09-22 10:27:02 -0400
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2014-03-04 18:38:10 -0500
commitbe326f4c9bdfdff8a85145fb89b0a44c4d20ebc6 (patch)
tree69026af05608449162f9eb2920953486392c18e2
parent6c2334e9019039d7952190e239e6a8f0d10101fe (diff)
uas: Fix reset locking
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 <hdegoede@redhat.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
-rw-r--r--drivers/usb/storage/uas.c9
1 files changed, 9 insertions, 0 deletions
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)
804 struct usb_device *udev = devinfo->udev; 804 struct usb_device *udev = devinfo->udev;
805 int err; 805 int err;
806 806
807 err = usb_lock_device_for_reset(udev, devinfo->intf);
808 if (err) {
809 shost_printk(KERN_ERR, sdev->host,
810 "%s FAILED to get lock err %d\n", __func__, err);
811 return FAILED;
812 }
813
807 shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__); 814 shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__);
808 devinfo->resetting = 1; 815 devinfo->resetting = 1;
809 uas_abort_work(devinfo); 816 uas_abort_work(devinfo);
@@ -817,6 +824,8 @@ static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
817 uas_configure_endpoints(devinfo); 824 uas_configure_endpoints(devinfo);
818 devinfo->resetting = 0; 825 devinfo->resetting = 0;
819 826
827 usb_unlock_device(udev);
828
820 if (err) { 829 if (err) {
821 shost_printk(KERN_INFO, sdev->host, "%s FAILED\n", __func__); 830 shost_printk(KERN_INFO, sdev->host, "%s FAILED\n", __func__);
822 return FAILED; 831 return FAILED;