[PATCH] fix libata inquiry VPD for ATAPI devices
authorTony Battersby <tonyb@cybernetics.com>
Wed, 21 Dec 2005 21:35:44 +0000 (16:35 -0500)
committerJeff Garzik <jgarzik@pobox.com>
Sat, 24 Dec 2005 15:02:24 +0000 (10:02 -0500)
The following patch prevents libata from incorrectly modifying inquiry
VPD pages and command support data from ATAPI devices.  I have tested
the patch with a SATA ATAPI tape drive on an AHCI controller.

Patch is against kernel 2.4.32 with 2.4.32-libata1.patch applied.

Anthony J. Battersby
Cybernetics

Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/scsi/libata-scsi.c

index 72ddba98f8fb562241bd263777a97867bc2fd1a2..2282c04fee4635097c0f3566f4251e6bd7cc5238 100644 (file)
@@ -2044,7 +2044,7 @@ static int atapi_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask)
        else {
                u8 *scsicmd = cmd->cmnd;
 
-               if (scsicmd[0] == INQUIRY) {
+               if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
                        u8 *buf = NULL;
                        unsigned int buflen;
 
@@ -2057,9 +2057,6 @@ static int atapi_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask)
         * to indicate to the Linux scsi midlayer this is a modern
         * device.  2) Ensure response data format / ATAPI information
         * are always correct.
-        */
-       /* FIXME: do we ever override EVPD pages and the like, with
-        * this code?
         */
                        if (buf[2] == 0) {
                                buf[2] = 0x5;