scsi_queue_rq() memsets sense_buffer before a command is dispatched. Libata is not memsetting sense_buffer before setting sense data that was obtained from a disk so there should be no reason to do a memset for ATA PASS-THROUGH / ATAPI. Memsetting the sense_buffer in ata_gen_passthru_sense() is erasing valid sense data that was previously obtained from a disk. A follow-up patch will modify ata_gen_passthru_sense() to stop generating sense data based on ATA status register bits if a valid sense data is already present. Signed-off-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx> --- drivers/ata/libata-eh.c | 2 -- drivers/ata/libata-scsi.c | 4 ---- 2 files changed, 6 deletions(-) diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 214b935c2ced..b5e05efe73f6 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -1479,8 +1479,6 @@ unsigned int atapi_eh_request_sense(struct ata_device *dev, struct ata_port *ap = dev->link->ap; struct ata_taskfile tf; - memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE); - /* initialize sense_buf with the error register, * for the case where they are -not- overwritten */ diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index cdf29b178ddc..032cf11d0bcc 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -858,8 +858,6 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) unsigned char *desc = sb + 8; u8 sense_key, asc, ascq; - memset(sb, 0, SCSI_SENSE_BUFFERSIZE); - /* * Use ata_to_sense_error() to map status register bits * onto sense key, asc & ascq. @@ -953,8 +951,6 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc) u64 block; u8 sense_key, asc, ascq; - memset(sb, 0, SCSI_SENSE_BUFFERSIZE); - if (ata_dev_disabled(dev)) { /* Device disabled after error recovery */ /* LOGICAL UNIT NOT READY, HARD RESET REQUIRED */ -- 2.45.2.627.g7a2c4fd464-goog