linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Douglas Gilbert <dgilbert@interlog.com>
To: Artem Bokhan <aptem@ngs.ru>
Cc: linux-scsi@vger.kernel.org,
	IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: sct erc does not work with megaraid
Date: Tue, 15 Feb 2011 12:17:14 -0500	[thread overview]
Message-ID: <4D5AB51A.2010002@interlog.com> (raw)
In-Reply-To: <4D5A9FE9.9020409@interlog.com>

On 11-02-15 10:46 AM, Douglas Gilbert wrote:
> On 11-02-15 05:20 AM, Artem Bokhan wrote:
>> 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.
>
> That code looked familiar but I'm not sure what your
> point was referring to it. Anyway ...
>
> Haven't worked much with Megaraid controllers but mptsas
> controllers implement SAT (or at least did) in their
> firmware. So upgrading the firmware on the controller fixed
> the problems I had (some years back) with SAT compliance.

Just doing some tests comparing SAT compliance in libata
and a LSI SAS 9212-4i4e controller with the latest firmware.
I would expect a Megaraid controller with recent firmware to
behave in the same way as a the 9212 (mpt2sas driver).

The test is to send an ATA IDENTIFY DEVICE command through the
SCSI ATA PASS-THROUGH (16) command with the CK_COND bit set:

First libata:

# sg_sat_identify --ck_cond /dev/sg1 -vvv
open /dev/sg1 with flags=0x802
     ATA pass through (16) cdb: 85 08 2e 00 00 00 01 00 00 00 00 00 00 00 ec 00
       duration=1 ms
ATA pass through:  Descriptor format, current;  Sense key: No Sense
  Additional sense: No additional sense information
   Descriptor type: ATA Status Return
     extend=0  error=0x0  sector_count=0x1
     lba=0x000000
     device=0x0  status=0x50
  Raw sense data (in hex):
         72 00 00 00 00 00 00 0e  09 0c 00 00 00 01 00 00
         00 00 00 00 00 50 00 00  00 00 00 00 00 00 00 00
         00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
         00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Seem to have got ATA Result Descriptor but it was not indicated
#

So libata is broken in its SAT compliance in lk 2.6.37 .


And this is what should happen (SATA disk connected to a
SAS 9212-4i4e controller):

# sg_sat_identify --ck_cond /dev/sg4 -vvv
open /dev/sg4 with flags=0x802
     ATA pass through (16) cdb: 85 08 2e 00 00 00 01 00 00 00 00 00 00 00 ec 00
       duration=2 ms
ATA pass through:  Descriptor format, current;  Sense key: Recovered Error
  Additional sense: ATA pass through information available
   Descriptor type: ATA Status Return
     extend=0  error=0x0  sector_count=0x0
     lba=0x000000
     device=0x0  status=0x50
  Raw sense data (in hex):
         72 01 00 1d 00 00 00 0e  09 0c 00 00 00 00 00 00
         00 00 00 00 00 50 00 00  00 00 00 00 00 00 00 00
         00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
         00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Response for IDENTIFY DEVICE ATA command:
  00     0c5a 3fff c837 0010 0000 0000 003f 0000     .Z ?. .7 .. .. .. .? ..
  08     0000 0000 2020 2020 2020 2020 2020 2020     .. ..
.....


The sense key of Recovered Error is correct for no error
to report (as per SAT and SAT-2 standards) and of course
the response to the IDENTIFY DEVICE should be forwarded
(libata doesn't do that either).

Doug Gilbert


  parent reply	other threads:[~2011-02-15 17:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-15 10:20 sct erc does not work with megaraid Artem Bokhan
2011-02-15 15:46 ` Douglas Gilbert
2011-02-15 16:00   ` Bokhan Artem
2011-02-15 17:17   ` Douglas Gilbert [this message]
2011-02-15 17:40     ` Bokhan Artem
2011-02-15 18:33       ` Douglas Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D5AB51A.2010002@interlog.com \
    --to=dgilbert@interlog.com \
    --cc=aptem@ngs.ru \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).