]> git.baikalelectronics.ru Git - kernel.git/commitdiff
scsi: sd: Use cached ATA Information VPD page
authorMartin K. Petersen <martin.petersen@oracle.com>
Wed, 2 Mar 2022 05:35:51 +0000 (00:35 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 2 May 2022 20:59:11 +0000 (16:59 -0400)
Since the ATA Information VPD is now cached at device discovery time it is
no longer necessary to request this page when we configure WRITE SAME.
Instead use the cached information to determine if this disk sits behind a
SCSI-ATA translation layer.

Link: https://lore.kernel.org/r/20220302053559.32147-7-martin.petersen@oracle.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/sd.c

index dc6e55761fd1f07239e60cd6f65c03ae47376cde..027738af5a22a97d591bae7fe8ff8dc506edb534 100644 (file)
@@ -2996,8 +2996,7 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
        }
 
        if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
-               /* too large values might cause issues with arcmsr */
-               int vpd_buf_len = 64;
+               struct scsi_vpd *vpd;
 
                sdev->no_report_opcodes = 1;
 
@@ -3005,8 +3004,11 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
                 * CODES is unsupported and the device has an ATA
                 * Information VPD page (SAT).
                 */
-               if (!scsi_get_vpd_page(sdev, 0x89, buffer, vpd_buf_len))
+               rcu_read_lock();
+               vpd = rcu_dereference(sdev->vpd_pg89);
+               if (vpd)
                        sdev->no_write_same = 1;
+               rcu_read_unlock();
        }
 
        if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME_16) == 1)