Was there every any definite reason for not accepting this, or something like it? Did it turn out not to be needed? Alan Stern On Sat, 8 Mar 2008, James Bottomley wrote: > What I was actually looking for was something simpler. How about this? > I'll still have to run it through the test wringer since it might still > end up causing problems if drivers are careless about their residue > calculations. > > James > > --- > > diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c > index e5c6f6a..96dbc63 100644 > --- a/drivers/scsi/scsi.c > +++ b/drivers/scsi/scsi.c > @@ -759,9 +759,16 @@ void scsi_finish_command(struct scsi_cmnd *cmd) > > good_bytes = scsi_bufflen(cmd) + cmd->request->extra_len; > if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) { > + int old_good_bytes = good_bytes; > drv = scsi_cmd_to_driver(cmd); > if (drv->done) > good_bytes = drv->done(cmd); > + /* > + * USB may not give sense identifying bad sector and > + * simply return a residue instead. > + */ > + if (good_bytes == old_good_bytes) > + good_bytes -= scsi_get_resid(cmd); > } > scsi_io_completion(cmd, good_bytes); > } -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html