NVMe: Use last bytes of f/w rev SCSI Inquiry
authorKeith Busch <keith.busch@intel.com>
Tue, 29 Apr 2014 21:52:27 +0000 (15:52 -0600)
committerMatthew Wilcox <matthew.r.wilcox@intel.com>
Wed, 4 Jun 2014 02:59:01 +0000 (22:59 -0400)
After skipping right-padded spaces, use the last four bytes of the
firmware revision when reporting the Inquiry Product Revision. These
are generally more indicative to what is running.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Acked-by: Vishal Verma <vishal.l.verma@linux.intel.com>
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
drivers/block/nvme-scsi.c

index 13403ee716da7fbcf184f30cdabae966c2001d75..4fc25b980535c5a903c07df1ff5d34d8be7213f9 100644 (file)
@@ -681,6 +681,7 @@ static int nvme_trans_standard_inquiry_page(struct nvme_ns *ns,
        u8 resp_data_format = 0x02;
        u8 protect;
        u8 cmdque = 0x01 << 1;
+       u8 fw_offset = sizeof(dev->firmware_rev);
 
        mem = dma_alloc_coherent(&dev->pci_dev->dev, sizeof(struct nvme_id_ns),
                                &dma_addr, GFP_KERNEL);
@@ -716,7 +717,11 @@ static int nvme_trans_standard_inquiry_page(struct nvme_ns *ns,
        inq_response[7] = cmdque;       /* wbus16=0 | sync=0 | vs=0 */
        strncpy(&inq_response[8], "NVMe    ", 8);
        strncpy(&inq_response[16], dev->model, 16);
-       strncpy(&inq_response[32], dev->firmware_rev, 4);
+
+       while (dev->firmware_rev[fw_offset - 1] == ' ' && fw_offset > 4)
+               fw_offset--;
+       fw_offset -= 4;
+       strncpy(&inq_response[32], dev->firmware_rev + fw_offset, 4);
 
        xfer_len = min(alloc_len, STANDARD_INQUIRY_LENGTH);
        res = nvme_trans_copy_to_user(hdr, inq_response, xfer_len);