diff options
author | Tejun Heo <htejun@gmail.com> | 2006-11-16 04:19:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-11-16 14:43:38 -0500 |
commit | 097b8457dafe7efc22201b4062e2d1e82e494067 (patch) | |
tree | c59484ba7965d4e18bff2e6492d296382cbf86ac /block/scsi_ioctl.c | |
parent | ae56fb16337c882c52806508f93ead4034004c7a (diff) |
[PATCH] scsi: clear garbage after CDBs on SG_IO
ATAPI devices transfer fixed number of bytes for CDBs (12 or 16). Some
ATAPI devices choke when shorter CDB is used and the left bytes contain
garbage. Block SG_IO cleared left bytes but SCSI SG_IO didn't. This patch
makes SCSI SG_IO clear it and simplify CDB clearing in block SG_IO.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Mathieu Fluhr <mfluhr@nero.com>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Douglas Gilbert <dougg@torque.net>
Acked-by: Jens Axboe <jens.axboe@oracle.com>
Cc: <stable@kernel.org>
Acked-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'block/scsi_ioctl.c')
-rw-r--r-- | block/scsi_ioctl.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index a19338e6215d..e55a75621437 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c | |||
@@ -286,9 +286,8 @@ static int sg_io(struct file *file, request_queue_t *q, | |||
286 | * fill in request structure | 286 | * fill in request structure |
287 | */ | 287 | */ |
288 | rq->cmd_len = hdr->cmd_len; | 288 | rq->cmd_len = hdr->cmd_len; |
289 | memset(rq->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */ | ||
289 | memcpy(rq->cmd, cmd, hdr->cmd_len); | 290 | memcpy(rq->cmd, cmd, hdr->cmd_len); |
290 | if (sizeof(rq->cmd) != hdr->cmd_len) | ||
291 | memset(rq->cmd + hdr->cmd_len, 0, sizeof(rq->cmd) - hdr->cmd_len); | ||
292 | 291 | ||
293 | memset(sense, 0, sizeof(sense)); | 292 | memset(sense, 0, sizeof(sense)); |
294 | rq->sense = sense; | 293 | rq->sense = sense; |