diff options
author | Tejun Heo <htejun@gmail.com> | 2008-04-02 17:35:19 +0900 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-04-04 02:43:36 -0400 |
commit | e52dcc4899cf1b7601379c31542bd91cd2997a64 (patch) | |
tree | 40bce50f8f912bbd2d988526f3f5c5763f67af62 | |
parent | 436d34b36202ef724778ded1e9cb10f8c37b32bc (diff) |
libata: ATA_12/16 doesn't fall into ATAPI_MISC
SAT passthrus don't really fit into ATAPI_MISC class. SAT passthru
commands always transfer multiple of 512 bytes and variable length
response is not allowed. This patch creates a separate category -
ATAPI_PASS_THRU - for these.
This fixes HSM violation on "hdparm -I".
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/ata/libata-core.c | 5 | ||||
-rw-r--r-- | include/linux/libata.h | 3 |
2 files changed, 7 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index e9b69ba489d..be95fdb6972 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -353,6 +353,11 @@ int atapi_cmd_type(u8 opcode) case GPCMD_READ_CD_MSF: return ATAPI_READ_CD; + case ATA_16: + case ATA_12: + if (atapi_passthru16) + return ATAPI_PASS_THRU; + /* fall thru */ default: return ATAPI_MISC; } diff --git a/include/linux/libata.h b/include/linux/libata.h index 92c64909ed2..37ee881c42a 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -350,7 +350,8 @@ enum { ATAPI_READ = 0, /* READs */ ATAPI_WRITE = 1, /* WRITEs */ ATAPI_READ_CD = 2, /* READ CD [MSF] */ - ATAPI_MISC = 3, /* the rest */ + ATAPI_PASS_THRU = 3, /* SAT pass-thru */ + ATAPI_MISC = 4, /* the rest */ }; enum ata_xfer_mask { |