On Sat, 2007-09-15 at 12:05 -0500, James Bottomley wrote:
> On Fri, 2007-09-14 at 10:58 -0700, Gilbert Wu wrote:
> > Fixed the problem that "smartctl -a /dev/some_sata_disk -d ata"  does
> > not work on SATA device. ( The smartctl v5.38 does need "-d ata"
> > option.)
> >   The aic94xx need to return ATA output register for all ATA commands
> > except ATA Read/Write commands.
> >   The aic94xx also mark out the DRQ bit from status register which is
> > treated as AC_ERR_HSM (host state machine violation) error by top layer
> > if it set to one.
> >  The firmware of aic94xx chip handle all ATA handshaking, data transfer
> > and return ATA output register which is sent by the device.  So the DRQ
> > bit may not reflect the last state of device when the command finished
> > and it is no meaning for the caller.
> > 
> > Signed-off-by: Gilbert Wu <[EMAIL PROTECTED]>
> 
> I'm afraid this can't go in.  It has a bad effect on my expander remote
> ATAPI device:

OK, found the root cause: your CSMI_TASK flag is getting set on all
packet commands.  I can think of two fixes: either smartctl should never
be used on ATAPI devices (reasonable, since smart is a disc protocol),
so we predicate the check by a test for the device being ATA:

        if (dev->sata_dev.command_set == ATA_COMMAND_SET
            && !is_ata_rw_cmd(scb->ata_task.fis.command))

Or simply add ATA_CMD_PACKET to your is_ata_rw_cmd() switch.

Either works on my system ... which do you prefer.

James




-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to