Re: [PATCH] libata: fix ATA passthrough handling for ATAPI devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff Garzik wrote:
> Douglas Gilbert wrote:
>> The 16 byte CDB that Tejun is talking about is the
>> ATA PASS THROUGH (16) SCSI command. That is valid to
> 
> I'm talking about the changes to the implementation, which appear to
> mistakenly allow 16-byte CDBs through to the ATAPI device, even if it
> only supports 12-byte CDBs.
> 
> I am quite aware of the ATA passthru SCSI command.  Heck, the spec had
> input from me.  I'm talking about something different.

This is what I saw, with the new ATA subsystem in
lk 2.6.19-rc1:

[root@sas ~]# lsscsi -H
[0]    sata_nv
[1]    sata_nv
[2]    sata_nv
[3]    sata_nv
[4]    pata_amd
[5]    pata_amd
[6]    mptsas
[7]    aic94xx

[root@sas ~]# lsscsi
[1:0:0:0]    disk    ATA      ST380013AS       3.18  /dev/sdb
[4:0:0:0]    disk    ATA      ST380011A        8.01  /dev/sda
[5:0:1:0]    cd/dvd  HL-DT-ST DVD-ROM GDR8163B 0L23  /dev/scd0

[root@sas ~]# sg_sat_identify --packet /dev/scd0 -vv
open /dev/scd0 with flags=0x802
    ATA pass through (16) cdb: 85 08 0e 00 00 00 01 00 00 00 00 00 00 00 a1 00
ATA pass through (16): transport error: Host_status=0x05 [DID_ABORT]
Driver_status=0x00 [DRIVER_OK, SUGGEST_OK]
ATA pass through (16) failed

[root@sas ~]# sg_sat_identify --packet --len=12 /dev/scd0 -vv
open /dev/scd0 with flags=0x802
    ATA pass through (12) cdb: a1 08 0e 00 01 00 00 00 00 a1 00 00
ATA pass through:  Fixed format, current;  Sense key: Illegal Request
 Additional sense: Invalid command operation code



The above were attempts to send IDENTIFY PACKET DEVICE
to the PATAPI cd/dvd drive via the ATA PASS THROUGH
(16 and 12) commands respectively. The first one caught
my attention. Why did it fail with a DID_ABORT?

Whatever the reason both responses are wrong. The second
one is wrong because
  - the cd/dvd drive does support that opcode (the error
    should be either not ready or incompatible format), or
  - it didn't do the ATA PASS THROUGH (12) properly

>> The only clash between MMC and SATL SCSI opcodes is
>> with opcode 0xA1: BLANK in MMC and ATA PASS THROUGH (12)
> 
> Ok, so the answer is, yes there is a clash, and thus this change will
> remove the ability for working-today setups to use BLANK.
> 
> In order to avoid breaking working setups, a method must be found which
> tells the SATL to not filter out the ATA passthru commands.

Or, as a temporary solution, if the device is ATAPI
carrying a SCSI command set with pdt=5 then:
  1) opcode 0xa1 goes straight through (i.e. BLANK)
  2) opcode 0x85 works as defined by sat-r09.pdf
     (implements the ATA PASS THROUGH (16) SCSI command)

>> This is all about being able to send ATA commands to
>> ATAPI devices that are valid for PACKET devices, examples:
>>     IDENTIFY PACKET DEVICE
>>     SET FEATURES
>>     IDENTIFY DEVICE (should abort command + set signature)
>>     DEVICE RESET
>> and I assume there are others.
> 
> I am quite aware of the purpose of ATA passthru :)

... and I do comparative analysis of SAT layers and
send bug reports.

Doug Gilbert
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux