usb-storage: update earlier scatter-gather bug fix
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 22 Feb 2008 22:00:06 +0000 (17:00 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 4 Mar 2008 22:57:43 +0000 (14:57 -0800)
This patch (as1037) makes a small update to the earlier as1035 patch.
The minimum-length computation shouldn't be done in
usb_stor_access_xfer_buf(), since that routine can be called multiple
times for a single transfer.  It should be done in
usb_stor_set_xfer_buf() instead, which gets called only once.

The way it is now isn't really _wrong_, but it isn't really _right_
either.  Moving the statement will be an improvement.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/storage/protocol.c

index 958f5b17847c57748a16a344a833a5a7f8dfe3ae..b9b8ede61fb337bf4927ef2638640bc6723d8102 100644 (file)
@@ -170,7 +170,6 @@ unsigned int usb_stor_access_xfer_buf(unsigned char *buffer,
 
        if (!sg)
                sg = scsi_sglist(srb);
-       buflen = min(buflen, scsi_bufflen(srb));
 
        /* This loop handles a single s-g list entry, which may
         * include multiple pages.  Find the initial page structure
@@ -232,6 +231,7 @@ void usb_stor_set_xfer_buf(unsigned char *buffer,
        unsigned int offset = 0;
        struct scatterlist *sg = NULL;
 
+       buflen = min(buflen, scsi_bufflen(srb));
        buflen = usb_stor_access_xfer_buf(buffer, buflen, srb, &sg, &offset,
                        TO_XFER_BUF);
        if (buflen < scsi_bufflen(srb))