On 8/31/22 22:30, Peter Fröhlich wrote: > Sorry for spamming replies and quoting myself. > > On Wed, Aug 31, 2022 at 12:21 PM Peter Fröhlich > <peter.hans.froehlich@xxxxxxxxx> wrote: >> On Wed, Aug 31, 2022 at 9:48 AM Damien Le Moal >> <damien.lemoal@xxxxxxxxxxxxxxxxxx> wrote: >>> On 8/31/22 16:15, Hannes Reinecke wrote: >>>> Oh, of course :-) >>>> That was when doing SMR support for libata. >>>> I dimly remember that some pre-spec drives had been using the DRDY bit >>>> to signal an unaligned write. Which never made it into the spec, but the >>>> decoding stayed. >>> >>> Any idea where the other bits come from ? Except for bit 5 (device fault), >>> I do not see anything else in the specs that mandate these definitions... >> >> I have since discovered the "SCSI to ATA" specification which has two >> tables about mapping ATA errors to SCSI errors. Among those I was able >> to find an "unaligned write" case as well, but I cannot properly parse >> the rest of the two tables yet. They are in sections 11.6 and 11.7 of >> that document. > > So I've re-read everything I can get my hands on and from what I can > tell the overall "flow" of ata_to_sense_error() is not what the > specifications would imply. For example we look at BSY on entry and > then say "ah, it's set, then let's ignore the error field" when the > specification (the way I read it) instead says "BSY is transport > dependent, so we say nothing about it here; but check the error bit in > status, if it is set, interpret the error field, otherwise there's > nothing for you in the error field". Of course I am a complete noob > when it comes to this ATA/SATA/SCSI/AHCI stuff, so please divide by at > least two. Sorry if this adds more confusion on top. I had a quick look at the specs again. I already spotted an error: when the status device fault bit is set, the sense should be HARDWARE ERROR / INTERNAL TARGET FAILURE and not ABORTED COMMAND / 0x47 like now. That is according to SAT-5. But looking at ACS-5, sections 6 and 7.1.6, there are *a lot* of cases that need to be taken care of. It looks like the sense_table does that, but need to cross check. As for the stat_table, except for the first buggy entry as mentioned above, I have no clue where these come from. SAT only defines the HARDWARE ERROR / INTERNAL TARGET FAILURE for when the status field device fault bit is set. Need to dig further, but I am afraid this code may be due to years of supporting drives returning weird errors that got mapped to sensible sense codes instead of a pure implementation of the specs... I need to spend some quality time with ACS and SAT documents to sort out this one... And lots of coffee too probably :) > > Cheers, > Peter -- Damien Le Moal Western Digital Research