[USBSTOR]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Mon, 23 Jan 2012 02:49:40 +0000 (02:49 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Mon, 23 Jan 2012 02:49:40 +0000 (02:49 +0000)
- Fix bug in usbstor, which did not take the offset into account

svn path=/branches/usb-bringup-trunk/; revision=55088

drivers/usb/usbstor/scsi.c

index cc58623..4966309 100644 (file)
@@ -576,7 +576,7 @@ USBSTOR_SendRequest(
     if (Context->TransferDataLength)
     {
         //
     if (Context->TransferDataLength)
     {
         //
-        // check if the original request already does not have an mdl associated
+        // check if the original request already does have an mdl associated
         //
         if (OriginalRequest)
         {
         //
         if (OriginalRequest)
         {
@@ -589,7 +589,25 @@ USBSTOR_SendRequest(
                 if (CommandLength == UFI_READ_WRITE_CMD_LEN)
                 {
                     MdlVirtualAddress = MmGetMdlVirtualAddress(OriginalRequest->MdlAddress);
                 if (CommandLength == UFI_READ_WRITE_CMD_LEN)
                 {
                     MdlVirtualAddress = MmGetMdlVirtualAddress(OriginalRequest->MdlAddress);
-                    ASSERT(MdlVirtualAddress == Context->TransferData);
+                    if (MdlVirtualAddress != Context->TransferData)
+                                       {
+                        //
+                        // lets build an mdl
+                        //
+                                               Context->TransferBufferMDL = IoAllocateMdl(Context->TransferData, MmGetMdlByteCount(OriginalRequest->MdlAddress), FALSE, FALSE, NULL);
+                        if (!Context->TransferBufferMDL)
+                        {
+                            //
+                            // failed to allocate MDL
+                            //
+                            return STATUS_INSUFFICIENT_RESOURCES;
+                        }
+
+                                               //
+                                               // now build the partial mdl
+                                               //
+                                               IoBuildPartialMdl(OriginalRequest->MdlAddress, Context->TransferBufferMDL, Context->TransferData, Context->TransferDataLength);
+                                       }
                 }
 
                 //
                 }
 
                 //