aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/storage/transport.c1
-rw-r--r--drivers/usb/storage/usb.c30
2 files changed, 14 insertions, 17 deletions
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index c1ba5301ebfc..e89e945fc4a7 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -923,6 +923,7 @@ int usb_stor_Bulk_max_lun(struct us_data *us)
923 int result; 923 int result;
924 924
925 /* issue the command */ 925 /* issue the command */
926 us->iobuf[0] = 0;
926 result = usb_stor_control_msg(us, us->recv_ctrl_pipe, 927 result = usb_stor_control_msg(us, us->recv_ctrl_pipe,
927 US_BULK_GET_MAX_LUN, 928 US_BULK_GET_MAX_LUN,
928 USB_DIR_IN | USB_TYPE_CLASS | 929 USB_DIR_IN | USB_TYPE_CLASS |
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 5164900e40c1..92ee079d9172 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -747,25 +747,13 @@ static int usb_stor_acquire_resources(struct us_data *us)
747 return -ENOMEM; 747 return -ENOMEM;
748 } 748 }
749 749
750 /* Lock the device while we carry out the next two operations */
751 down(&us->dev_semaphore);
752
753 /* For bulk-only devices, determine the max LUN value */
754 if (us->protocol == US_PR_BULK) {
755 p = usb_stor_Bulk_max_lun(us);
756 if (p < 0) {
757 up(&us->dev_semaphore);
758 return p;
759 }
760 us->max_lun = p;
761 }
762
763 /* Just before we start our control thread, initialize 750 /* Just before we start our control thread, initialize
764 * the device if it needs initialization */ 751 * the device if it needs initialization */
765 if (us->unusual_dev->initFunction) 752 if (us->unusual_dev->initFunction) {
766 us->unusual_dev->initFunction(us); 753 p = us->unusual_dev->initFunction(us);
767 754 if (p)
768 up(&us->dev_semaphore); 755 return p;
756 }
769 757
770 /* Start up our control thread */ 758 /* Start up our control thread */
771 p = kernel_thread(usb_stor_control_thread, us, CLONE_VM); 759 p = kernel_thread(usb_stor_control_thread, us, CLONE_VM);
@@ -904,6 +892,14 @@ retry:
904 892
905 /* If the device is still connected, perform the scanning */ 893 /* If the device is still connected, perform the scanning */
906 if (!test_bit(US_FLIDX_DISCONNECTING, &us->flags)) { 894 if (!test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
895
896 /* For bulk-only devices, determine the max LUN value */
897 if (us->protocol == US_PR_BULK &&
898 !(us->flags & US_FL_SINGLE_LUN)) {
899 down(&us->dev_semaphore);
900 us->max_lun = usb_stor_Bulk_max_lun(us);
901 up(&us->dev_semaphore);
902 }
907 scsi_scan_host(us_to_host(us)); 903 scsi_scan_host(us_to_host(us));
908 printk(KERN_DEBUG "usb-storage: device scan complete\n"); 904 printk(KERN_DEBUG "usb-storage: device scan complete\n");
909 905