Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] skip sense logging for some ATA PASS-THROUGH cdbs

Further to the lsml thread titled:
"does scsi_io_completion need to dump sense data for ata pass through (ck_cond =
1) ?"

This is a patch to skip logging when the sense data is
associated with a SENSE_KEY of "RECOVERED_ERROR" and the
additional sense code is "ATA PASS-THROUGH INFORMATION
AVAILABLE". This only occurs with the SAT ATA PASS-THROUGH
commands when CK_COND=1 (in the cdb). It indicates that
the sense data contains ATA registers.

Smartmontools uses such commands on ATA disks connected via
SAT. Periodic checks such as those done by smartd cause
nuisance entries into logs that are:
- neither errors nor warnings
- pointless unless the cdb that caused them are also logged

Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>

authored by

Douglas Gilbert and committed by
James Bottomley
e7efe593 5d7ebb9c

+8 -2
+8 -2
drivers/scsi/scsi_lib.c
··· 773 773 * we already took a copy of the original into rq->errors which 774 774 * is what gets returned to the user 775 775 */ 776 - if (sense_valid && sshdr.sense_key == RECOVERED_ERROR) { 777 - if (!(req->cmd_flags & REQ_QUIET)) 776 + if (sense_valid && (sshdr.sense_key == RECOVERED_ERROR)) { 777 + /* if ATA PASS-THROUGH INFORMATION AVAILABLE skip 778 + * print since caller wants ATA registers. Only occurs on 779 + * SCSI ATA PASS_THROUGH commands when CK_COND=1 780 + */ 781 + if ((sshdr.asc == 0x0) && (sshdr.ascq == 0x1d)) 782 + ; 783 + else if (!(req->cmd_flags & REQ_QUIET)) 778 784 scsi_print_sense("", cmd); 779 785 result = 0; 780 786 /* BLOCK_PC may have set error */