On Wed, 2008-02-27 at 03:24 +0100, Mike Galbraith wrote: > On Tue, 2008-02-26 at 15:08 -0800, Andrew Morton wrote: > > So this change fixes a bug? Can we have a recap of how it does this? > > Yeah, it fixes the problem. (wrt recap, if I could write it, it would > be a changelog;) Hm. After rummaging around some more in both kernel and userland, I think this patchlet is not only functional, but (random accident) technically correct. What the heck, let's see if it flies... snippet from userland: /* * Return the residual DMA count for last command. * If this count is < 0, then a DMA overrun occured. */ EXPORT int scg_getresid(scgp) SCSI *scgp; { return (scgp->scmd->resid); } This function is used all over the place in cdrecord to determine transfer size. (patchlet takes wing, and... goes splat?) Fix CD burning regression introduced by 6b00769fe1502b4ad97bb327ef7ac971b208bfb5. raw_data_len must be updated to reflect residual data upon IO completion because it is used by blk_complete_sghdr_rq() to set hdr->resid which eventually becomes visible to userland. Signed-off-by: Mike Galbraith <efault@xxxxxx> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index ba21d97..7a6f784 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -871,7 +871,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) scsi_end_bidi_request(cmd); return; } - req->data_len = scsi_get_resid(cmd); + req->data_len = req->raw_data_len = scsi_get_resid(cmd); } BUG_ON(blk_bidi_rq(req)); /* bidi not support for !blk_pc_request yet */ -Mike - 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