diff options
author | Keith Busch <keith.busch@intel.com> | 2014-04-29 17:52:27 -0400 |
---|---|---|
committer | Matthew Wilcox <matthew.r.wilcox@intel.com> | 2014-06-03 22:59:01 -0400 |
commit | dedf4b156134e0dedec18ebecda3e74077fa7c92 (patch) | |
tree | 760542df2883422bdfd8568173e799e70b75cef4 /drivers/block/nvme-scsi.c | |
parent | b4e75cbf1364c4bbce3599c3279892a55b6ede07 (diff) |
NVMe: Use last bytes of f/w rev SCSI Inquiry
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>
Diffstat (limited to 'drivers/block/nvme-scsi.c')
-rw-r--r-- | drivers/block/nvme-scsi.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/block/nvme-scsi.c b/drivers/block/nvme-scsi.c index 13403ee716da..4fc25b980535 100644 --- a/drivers/block/nvme-scsi.c +++ b/drivers/block/nvme-scsi.c | |||
@@ -681,6 +681,7 @@ static int nvme_trans_standard_inquiry_page(struct nvme_ns *ns, | |||
681 | u8 resp_data_format = 0x02; | 681 | u8 resp_data_format = 0x02; |
682 | u8 protect; | 682 | u8 protect; |
683 | u8 cmdque = 0x01 << 1; | 683 | u8 cmdque = 0x01 << 1; |
684 | u8 fw_offset = sizeof(dev->firmware_rev); | ||
684 | 685 | ||
685 | mem = dma_alloc_coherent(&dev->pci_dev->dev, sizeof(struct nvme_id_ns), | 686 | mem = dma_alloc_coherent(&dev->pci_dev->dev, sizeof(struct nvme_id_ns), |
686 | &dma_addr, GFP_KERNEL); | 687 | &dma_addr, GFP_KERNEL); |
@@ -716,7 +717,11 @@ static int nvme_trans_standard_inquiry_page(struct nvme_ns *ns, | |||
716 | inq_response[7] = cmdque; /* wbus16=0 | sync=0 | vs=0 */ | 717 | inq_response[7] = cmdque; /* wbus16=0 | sync=0 | vs=0 */ |
717 | strncpy(&inq_response[8], "NVMe ", 8); | 718 | strncpy(&inq_response[8], "NVMe ", 8); |
718 | strncpy(&inq_response[16], dev->model, 16); | 719 | strncpy(&inq_response[16], dev->model, 16); |
719 | strncpy(&inq_response[32], dev->firmware_rev, 4); | 720 | |
721 | while (dev->firmware_rev[fw_offset - 1] == ' ' && fw_offset > 4) | ||
722 | fw_offset--; | ||
723 | fw_offset -= 4; | ||
724 | strncpy(&inq_response[32], dev->firmware_rev + fw_offset, 4); | ||
720 | 725 | ||
721 | xfer_len = min(alloc_len, STANDARD_INQUIRY_LENGTH); | 726 | xfer_len = min(alloc_len, STANDARD_INQUIRY_LENGTH); |
722 | res = nvme_trans_copy_to_user(hdr, inq_response, xfer_len); | 727 | res = nvme_trans_copy_to_user(hdr, inq_response, xfer_len); |