Greg KH wrote:Yes it is ;) Jens could you test the patch below? if it works I'll submit a proper patch. Please forgive me for the bug. Matthew, Greg, Is there a way to extract from messages the usb storage transport used? I'm guessing it is freecom do to the fact that I find a bug there. Thanks Boaz --- drivers/usb/storage/freecom.c | 4 ++-- drivers/usb/storage/transport.c | 12 +++++++++--- drivers/usb/storage/transport.h | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c index f5a4e8d..8d77603 100644 --- a/drivers/usb/storage/freecom.c +++ b/drivers/usb/storage/freecom.c @@ -132,7 +132,7 @@ freecom_readdata (struct scsi_cmnd *srb, struct us_data *us, /* Now transfer all of our blocks. */ US_DEBUGP("Start of read\n"); - result = usb_stor_bulk_srb(us, ipipe, srb); + result = usb_stor_bulk_srb_length(us, ipipe, srb, count); US_DEBUGP("freecom_readdata done!\n"); if (result > USB_STOR_XFER_SHORT) @@ -165,7 +165,7 @@ freecom_writedata (struct scsi_cmnd *srb, struct us_data *us, /* Now transfer all of our blocks. */ US_DEBUGP("Start of write\n"); - result = usb_stor_bulk_srb(us, opipe, srb); + result = usb_stor_bulk_srb_length(us, opipe, srb, count); US_DEBUGP("freecom_writedata done!\n"); if (result > USB_STOR_XFER_SHORT) diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c index d9f4912..5072235 100644 --- a/drivers/usb/storage/transport.c +++ b/drivers/usb/storage/transport.c @@ -462,18 +462,24 @@ static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe, * Common used function. Transfer a complete command * via usb_stor_bulk_transfer_sglist() above. Set cmnd resid */ -int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, - struct scsi_cmnd* srb) +int usb_stor_bulk_srb_length(struct us_data* us, unsigned int pipe, + struct scsi_cmnd* srb, unsigned length) { unsigned int partial; int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb), - scsi_sg_count(srb), scsi_bufflen(srb), + scsi_sg_count(srb), length, &partial); scsi_set_resid(srb, scsi_bufflen(srb) - partial); return result; } +int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, + struct scsi_cmnd* srb) +{ + return usb_stor_bulk_srb_length(us, pipe, srb, scsi_bufflen(srb)); +} + /* * Transfer an entire SCSI command's worth of data payload over the bulk * pipe. diff --git a/drivers/usb/storage/transport.h b/drivers/usb/storage/transport.h index ada7c2f..03e395d 100644 --- a/drivers/usb/storage/transport.h +++ b/drivers/usb/storage/transport.h @@ -139,8 +139,9 @@ extern int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, void *buf, unsigned int length, unsigned int *act_len); extern int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe, void *buf, unsigned int length, int use_sg, int *residual); +extern int usb_stor_bulk_srb_length(struct us_data* us, unsigned int pipe, + struct scsi_cmnd* srb, unsigned length); extern int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, struct scsi_cmnd* srb); - extern int usb_stor_port_reset(struct us_data *us); #endif --
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Trent Piepho | Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code |
| Steven Rostedt | Re: -rt scheduling: wakeup bug? |
| Andrew Morton | Re: [BUG] New Kernel Bugs |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
| David Miller | [GIT]: Networking |
git: | |
