]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
scsi: add a blacklist flag which enables VPD page inquiries
authorMartin K. Petersen <martin.petersen@oracle.com>
Tue, 15 Jul 2014 16:49:17 +0000 (12:49 -0400)
committerChristoph Hellwig <hch@lst.de>
Fri, 25 Jul 2014 21:16:41 +0000 (17:16 -0400)
Despite supporting modern SCSI features some storage devices continue to
claim conformance to an older version of the SPC spec. This is done for
compatibility with legacy operating systems.

Linux by default will not attempt to read VPD pages on devices that
claim SPC-2 or older. Introduce a blacklist flag that can be used to
trigger VPD page inquiries on devices that are known to support them.

Reported-by: KY Srinivasan <kys@microsoft.com>
Tested-by: KY Srinivasan <kys@microsoft.com>
Reviewed-by: KY Srinivasan <kys@microsoft.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
CC: <stable@vger.kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/scsi_scan.c
drivers/scsi/sd.c
include/scsi/scsi_device.h
include/scsi/scsi_devinfo.h

index a5a0bdeba857d8afbeaf934c0126fe25124e8c15..50536cd6b3f2728f30cf93dafc7d7e1cd7498ca4 100644 (file)
@@ -928,7 +928,9 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
 
        sdev->eh_timeout = SCSI_DEFAULT_EH_TIMEOUT;
 
-       if (*bflags & BLIST_SKIP_VPD_PAGES)
+       if (*bflags & BLIST_TRY_VPD_PAGES)
+               sdev->try_vpd_pages = 1;
+       else if (*bflags & BLIST_SKIP_VPD_PAGES)
                sdev->skip_vpd_pages = 1;
 
        transport_configure_device(&sdev->sdev_gendev);
index 377a5206017e33885b3d8bef86cb7198c52988bd..4d72831eafe595e53e79b300e3890f4a38233261 100644 (file)
@@ -2726,6 +2726,11 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
 
 static int sd_try_extended_inquiry(struct scsi_device *sdp)
 {
+       /* Attempt VPD inquiry if the device blacklist explicitly calls
+        * for it.
+        */
+       if (sdp->try_vpd_pages)
+               return 1;
        /*
         * Although VPD inquiries can go to SCSI-2 type devices,
         * some USB ones crash on receiving them, and the pages
index b895784e2313b0d65ba815416edd8235e16d0ea9..1a0d1842962e132488ccc95f4e2bde0508d2d408 100644 (file)
@@ -154,6 +154,7 @@ struct scsi_device {
        unsigned skip_ms_page_8:1;      /* do not use MODE SENSE page 0x08 */
        unsigned skip_ms_page_3f:1;     /* do not use MODE SENSE page 0x3f */
        unsigned skip_vpd_pages:1;      /* do not read VPD pages */
+       unsigned try_vpd_pages:1;       /* attempt to read VPD pages */
        unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */
        unsigned no_start_on_add:1;     /* do not issue start on add */
        unsigned allow_restart:1; /* issue START_UNIT in error handler */
index 8670c04e199e5cfb1090a531f9a12edc8d230ce4..1fdd6fc5492bbeee2c73c84feebac77c8bee88e5 100644 (file)
@@ -34,4 +34,5 @@
 #define BLIST_SKIP_VPD_PAGES   0x4000000 /* Ignore SBC-3 VPD pages */
 #define BLIST_SCSI3LUN         0x8000000 /* Scan more than 256 LUNs
                                             for sequential scan */
+#define BLIST_TRY_VPD_PAGES    0x10000000 /* Attempt to read VPD pages */
 #endif