[SCSI] Fix printing of failed 32-byte commands
Having the large CDB allocation logic in sd.c means that scsi_io_completion does not have access to the command buffer. That in turn causes garbage to be printed when a 32-byte command fails. Move the command printing to sd_done where the command buffer is intact. Clear the command buffer pointer after the extended CDB has been freed. Make scsi_print_command ignore commands with NULL CDB pointers to inhibit printing of garbled command strings. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
committed by
James Bottomley
parent
8475f688d7
commit
77c9cfc51b
@@ -1209,8 +1209,19 @@ static int sd_done(struct scsi_cmnd *SCpnt)
|
||||
sd_dif_complete(SCpnt, good_bytes);
|
||||
|
||||
if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type)
|
||||
== SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd)
|
||||
== SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) {
|
||||
|
||||
/* We have to print a failed command here as the
|
||||
* extended CDB gets freed before scsi_io_completion()
|
||||
* is called.
|
||||
*/
|
||||
if (result)
|
||||
scsi_print_command(SCpnt);
|
||||
|
||||
mempool_free(SCpnt->cmnd, sd_cdb_pool);
|
||||
SCpnt->cmnd = NULL;
|
||||
SCpnt->cmd_len = 0;
|
||||
}
|
||||
|
||||
return good_bytes;
|
||||
}
|
||||
|
Reference in New Issue
Block a user