nvme fixes for Linux 5.18
- tone down the error logging added this merge window a bit (Chaitanya Kulkarni) - quirk devices with non-unique unique identifiers (me) -----BEGIN PGP SIGNATURE----- iQI/BAABCgApFiEEgdbnc3r/njty3Iq9D55TZVIEUYMFAmJY+48LHGhjaEBsc3Qu ZGUACgkQD55TZVIEUYOtEhAAwGfjB+XGOVDZcxEOSDEhLTZmAupxX+bRzoQA8Qr1 xWVAbjk6PjEB/YUQ6tfPzN1FNcDZiOK+VO4VJmJgjNMYANyN5UY3xk5aTX1MboGF 1weFz6H3kveLQF5BAqX+tQtdFyeAH6rk0pIQ/YYJymFkE1rnldwJtClmibpsJTBD Q1Ks4WRff3KggalxrSSMxZBui348dlPE8KJqLUpL25T6Cn4W5BnpJwEph5K6wNvB 6Sg0LyEAwQdX3CKbztZaV5F3OeBcg5YgEx6gQCNRvj8/IBC874gIQTHc8A3Hdq38 BQvvo/pjzLTDgbN6iLddbIJHMVG63zroBv2rY2Q/v95I6RtAL7jqI+JFkZF+0ngK tgHGn1ao2OwxcoPgc8ayZg7Y8IjvDwL8yI2DFJwdQlSe1ucvc+9lP0emn6j/+RO6 IcxP8MBa2SaDA6iAdERvKoOVWXLveqPn7rXhejc2auMgbuRnQgqQtbYwKku18Zcq AMwUoZqUgm6n5HB1JLQ63Av2Zu86hoQwoSAbSSZ7CoIFKexKwG4hcU0Sgl2/wiYV FtngYN6c4St5uC1+aLJ9Hg2xsp0gZBA3Z/rtOvkaka3ssp8y1frO/YyoLsFAfanw veXpBP7wNesCVv0KVOJc/QlGKIjA5X5ednhCrFSVfjQd/ESNDoVQ6LEboDaYI411 dds= =m9fO -----END PGP SIGNATURE----- Merge tag 'nvme-5.18-2022-04-15' of git://git.infradead.org/nvme into block-5.18 Pull NVMe fixes from Christoph: "nvme fixes for Linux 5.18 - tone down the error logging added this merge window a bit (Chaitanya Kulkarni) - quirk devices with non-unique unique identifiers (me)" * tag 'nvme-5.18-2022-04-15' of git://git.infradead.org/nvme: nvme-pci: disable namespace identifiers for Qemu controllers nvme-pci: disable namespace identifiers for the MAXIO MAP1002/1202 nvme: add a quirk to disable namespace identifiers nvme: don't print verbose errors for internal passthrough requests
This commit is contained in:
commit
89a2ee91ed
@ -366,7 +366,7 @@ static inline void nvme_end_req(struct request *req)
|
||||
{
|
||||
blk_status_t status = nvme_error_status(nvme_req(req)->status);
|
||||
|
||||
if (unlikely(nvme_req(req)->status != NVME_SC_SUCCESS))
|
||||
if (unlikely(nvme_req(req)->status && !(req->rq_flags & RQF_QUIET)))
|
||||
nvme_log_error(req);
|
||||
nvme_end_req_zoned(req);
|
||||
nvme_trace_bio_complete(req);
|
||||
@ -1015,6 +1015,7 @@ int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
|
||||
goto out;
|
||||
}
|
||||
|
||||
req->rq_flags |= RQF_QUIET;
|
||||
ret = nvme_execute_rq(req, at_head);
|
||||
if (result && ret >= 0)
|
||||
*result = nvme_req(req)->result;
|
||||
@ -1287,6 +1288,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
|
||||
warn_str, cur->nidl);
|
||||
return -1;
|
||||
}
|
||||
if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
|
||||
return NVME_NIDT_EUI64_LEN;
|
||||
memcpy(ids->eui64, data + sizeof(*cur), NVME_NIDT_EUI64_LEN);
|
||||
return NVME_NIDT_EUI64_LEN;
|
||||
case NVME_NIDT_NGUID:
|
||||
@ -1295,6 +1298,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
|
||||
warn_str, cur->nidl);
|
||||
return -1;
|
||||
}
|
||||
if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
|
||||
return NVME_NIDT_NGUID_LEN;
|
||||
memcpy(ids->nguid, data + sizeof(*cur), NVME_NIDT_NGUID_LEN);
|
||||
return NVME_NIDT_NGUID_LEN;
|
||||
case NVME_NIDT_UUID:
|
||||
@ -1303,6 +1308,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
|
||||
warn_str, cur->nidl);
|
||||
return -1;
|
||||
}
|
||||
if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
|
||||
return NVME_NIDT_UUID_LEN;
|
||||
uuid_copy(&ids->uuid, data + sizeof(*cur));
|
||||
return NVME_NIDT_UUID_LEN;
|
||||
case NVME_NIDT_CSI:
|
||||
@ -1399,12 +1406,18 @@ static int nvme_identify_ns(struct nvme_ctrl *ctrl, unsigned nsid,
|
||||
if ((*id)->ncap == 0) /* namespace not allocated or attached */
|
||||
goto out_free_id;
|
||||
|
||||
if (ctrl->vs >= NVME_VS(1, 1, 0) &&
|
||||
!memchr_inv(ids->eui64, 0, sizeof(ids->eui64)))
|
||||
memcpy(ids->eui64, (*id)->eui64, sizeof(ids->eui64));
|
||||
if (ctrl->vs >= NVME_VS(1, 2, 0) &&
|
||||
!memchr_inv(ids->nguid, 0, sizeof(ids->nguid)))
|
||||
memcpy(ids->nguid, (*id)->nguid, sizeof(ids->nguid));
|
||||
|
||||
if (ctrl->quirks & NVME_QUIRK_BOGUS_NID) {
|
||||
dev_info(ctrl->device,
|
||||
"Ignoring bogus Namespace Identifiers\n");
|
||||
} else {
|
||||
if (ctrl->vs >= NVME_VS(1, 1, 0) &&
|
||||
!memchr_inv(ids->eui64, 0, sizeof(ids->eui64)))
|
||||
memcpy(ids->eui64, (*id)->eui64, sizeof(ids->eui64));
|
||||
if (ctrl->vs >= NVME_VS(1, 2, 0) &&
|
||||
!memchr_inv(ids->nguid, 0, sizeof(ids->nguid)))
|
||||
memcpy(ids->nguid, (*id)->nguid, sizeof(ids->nguid));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -144,6 +144,11 @@ enum nvme_quirks {
|
||||
* encoding the generation sequence number.
|
||||
*/
|
||||
NVME_QUIRK_SKIP_CID_GEN = (1 << 17),
|
||||
|
||||
/*
|
||||
* Reports garbage in the namespace identifiers (eui64, nguid, uuid).
|
||||
*/
|
||||
NVME_QUIRK_BOGUS_NID = (1 << 18),
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -3409,7 +3409,10 @@ static const struct pci_device_id nvme_id_table[] = {
|
||||
.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
||||
{ PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
|
||||
.driver_data = NVME_QUIRK_IDENTIFY_CNS |
|
||||
NVME_QUIRK_DISABLE_WRITE_ZEROES, },
|
||||
NVME_QUIRK_DISABLE_WRITE_ZEROES |
|
||||
NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_VDEVICE(REDHAT, 0x0010), /* Qemu emulated controller */
|
||||
.driver_data = NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_DEVICE(0x126f, 0x2263), /* Silicon Motion unidentified */
|
||||
.driver_data = NVME_QUIRK_NO_NS_DESC_LIST, },
|
||||
{ PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */
|
||||
@ -3447,6 +3450,10 @@ static const struct pci_device_id nvme_id_table[] = {
|
||||
.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
|
||||
{ PCI_DEVICE(0x2646, 0x2263), /* KINGSTON A2000 NVMe SSD */
|
||||
.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
|
||||
{ PCI_DEVICE(0x1e4B, 0x1002), /* MAXIO MAP1002 */
|
||||
.driver_data = NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_DEVICE(0x1e4B, 0x1202), /* MAXIO MAP1202 */
|
||||
.driver_data = NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0061),
|
||||
.driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0065),
|
||||
|
Loading…
x
Reference in New Issue
Block a user