sct erc does not work with megaraid
Hello!
I'm trying to get/set sctserc (SMART Command Transport Error Recovery Control) data from sata disk attached to lsi megaraid controller with smartmontools, but this function does not work.
I want to figure out: is this driver or firmware issue? May someone to help to fix this?
The issue can be described as follows:
The ATA PASS-THROUGH(16) implementation in the SAT layer of the megaraid driver or firmware does not return the ATA output registers if requested. This violates SAT standard (http://www.t10.org/drafts.htm#SAT).
Expected: If CK_COND (bit 5 of CDB[2]) is set, ATA PASS-THROUGH(16) (CDB[0] = 0x85) shall return a CHECK CONDITION even if the ATA command completed successfully, and return the ATA output registers in the sense data using ATA return descriptor format (descriptor code 0x09).
Observed: If CK_COND is set and the ATA command completed successfully, ATA PASS-THROUGH(16) does not return a CHECK CONDITION or the sense data does not contain an ATA return descriptor.
See also the smartmontools SAT implementation (http://sourceforge.net/apps/trac/smartmontools/browser/trunk/smartmontools/scsiata.cpp?rev=3258#L146) for further info.
Quoted 20 lines · Bokhan Artem
Hello!
I'm trying to get/set sctserc (SMART Command Transport Error Recovery Control) data from sata disk attached to lsi megaraid controller with smartmontools, but this function does not work.
I want to figure out: is this driver or firmware issue? May someone to help to fix this?
The issue can be described as follows:
The ATA PASS-THROUGH(16) implementation in the SAT layer of the megaraid driver or firmware does not return the ATA output registers if requested. This violates SAT standard (http://www.t10.org/drafts.htm#SAT).
Expected: If
CK_COND(bit 5 of CDB[2]) is set, ATA PASS-THROUGH(16) (CDB[0] =0x85) shall return a CHECK CONDITION even if the ATA command completed successfully, and return the ATA output registers in the sense data using ATA return descriptor format (descriptor code0x09).
Quoted 5 lines
Observed: If
CK_CONDis set and the ATA command completed successfully, ATA PASS-THROUGH(16) does not return a CHECK CONDITION or the sense data does not contain an ATA return descriptor.From the description, it's a firmware issue ... the driver tends to
return exactly what the firmware tells it. There's definitely no special processing for ATA_12 or ATA_16 commands, they're treated as normal SCSI ones, so if there's no SAM_STAT_CHECK_CONDITION, the firmware isn't sending one.
James