[USBSTOR]
[reactos.git] / reactos / drivers / usb / usbstor / misc.c
index 2404caa..6b60cf8 100644 (file)
@@ -23,7 +23,7 @@ NTSTATUS
 NTAPI
 USBSTOR_SyncForwardIrpCompletionRoutine(
     PDEVICE_OBJECT DeviceObject,
-    PIRP Irp, 
+    PIRP Irp,
     PVOID Context)
 {
     if (Irp->PendingReturned)
@@ -292,7 +292,6 @@ USBSTOR_ClassRequest(
 
 {
     PURB Urb;
-    PUCHAR Buffer;
     NTSTATUS Status;
 
     //
@@ -307,19 +306,6 @@ USBSTOR_ClassRequest(
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    //
-    // allocate 1-byte buffer
-    //
-    Buffer = (PUCHAR)AllocateItem(NonPagedPool, sizeof(UCHAR));
-    if (!Buffer)
-    {
-        //
-        // no memory
-        //
-        FreeItem(Buffer);
-        return STATUS_INSUFFICIENT_RESOURCES;
-    }
-
     //
     // initialize vendor request
     //
@@ -376,19 +362,34 @@ USBSTOR_GetMaxLUN(
 
     DPRINT("MaxLUN: %x\n", *Buffer);
 
-    if (*Buffer > 0xF)
+    if (NT_SUCCESS(Status))
     {
-        //
-        // invalid response documented in usb mass storage specification
-        //
-        Status = STATUS_DEVICE_DATA_ERROR;
+        if (*Buffer > 0xF)
+        {
+            //
+            // invalid response documented in usb mass storage specification
+            //
+            Status = STATUS_DEVICE_DATA_ERROR;
+        }
+        else
+        {
+            //
+            // store maxlun
+            //
+            DeviceExtension->MaxLUN = *Buffer;
+        }
     }
     else
     {
         //
-        // store maxlun
+        // "USB Mass Storage Class. Bulk-Only Transport. Revision 1.0"
+        // 3.2  Get Max LUN (class-specific request) :
+        // Devices that do not support multiple LUNs may STALL this command.
         //
-        DeviceExtension->MaxLUN = *Buffer;
+        USBSTOR_ResetDevice(DeviceExtension->LowerDeviceObject, DeviceExtension);
+
+        DeviceExtension->MaxLUN = 0;
+        Status = STATUS_SUCCESS;
     }
 
     //