mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
nvme fixes for Linux 6.5
- Fixes for request_queue state (Ming) - Another uuid quirk (August) -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE3Fbyvv+648XNRdHTPe3zGtjzRgkFAmTLvkMACgkQPe3zGtjz RglPmhAAkj5xv1UO4nga4i+GHgjl07Eohi8C4tYWiRae6K2bzl1sQsKRbtaDKBY3 RmAZ2kZIJteDso6RTYqzAffSLHLRav3gs4gxoEgETAVlqSqhNGp7xoi8YdajK5As h1dl6P1Whs4p0CH118GNtPvYcKo+p9SVpR8bTqSlWUGNu0L/auf/B8/E5SaEScbe ovqElpcgvAmBFCo9LiHpEph8bDMeQRsJRIomEFJU98BwM35VMe0H3lbmw9pgBEny cZOTXf+AznBJWUwZ+gQtvGPO8r8QVlwgHtT3SVBDMRZjkQLnKXZpgU9btlOMBCNv IaLCVTOfIKTihM5wxRByx1OJx4DHVM2oGn/06RR38+TkQUgaIUHqWY9Po4fY21C0 gHe28iFNJHMKyznjepNnKHDS28ZTMk2taD8EbR2ke8Kba8HWv4hNRIHJ/PvJHwJW mWuCwQA0hvUrL2HrnlU1sVJt5+zu3mE9dfp2YbhCE/vVLp5+SYnQkRm6TVtob6D4 7Qmj/I4QkxuZs7XIgXaA8bHH5NPH4Ga2j3WFxQA3Pvp7ZXTnRbbVUWHrD+N7i1cM cNLfSGww5SZAvgzBM17UcA/MxKHENfZM0O9A/4hlZwH544n21aQAefv19yqTLfBE e0CE0+htpxgBJL1DmakMl7FJIpl4eQfhwH3C24sBaG5u/w/mMcE= =YQ2k -----END PGP SIGNATURE----- Merge tag 'nvme-6.5-2023-08-02' of git://git.infradead.org/nvme into block-6.5 Pull NVMe fixes from Keith: "nvme fixes for Linux 6.5 - Fixes for request_queue state (Ming) - Another uuid quirk (August)" * tag 'nvme-6.5-2023-08-02' of git://git.infradead.org/nvme: nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G nvme-rdma: fix potential unbalanced freeze & unfreeze nvme-tcp: fix potential unbalanced freeze & unfreeze nvme: fix possible hang when removing a controller during error recovery
This commit is contained in:
commit
a592ab6171
|
|
@ -3933,6 +3933,12 @@ void nvme_remove_namespaces(struct nvme_ctrl *ctrl)
|
|||
*/
|
||||
nvme_mpath_clear_ctrl_paths(ctrl);
|
||||
|
||||
/*
|
||||
* Unquiesce io queues so any pending IO won't hang, especially
|
||||
* those submitted from scan work
|
||||
*/
|
||||
nvme_unquiesce_io_queues(ctrl);
|
||||
|
||||
/* prevent racing with ns scanning */
|
||||
flush_work(&ctrl->scan_work);
|
||||
|
||||
|
|
@ -3942,10 +3948,8 @@ void nvme_remove_namespaces(struct nvme_ctrl *ctrl)
|
|||
* removing the namespaces' disks; fail all the queues now to avoid
|
||||
* potentially having to clean up the failed sync later.
|
||||
*/
|
||||
if (ctrl->state == NVME_CTRL_DEAD) {
|
||||
if (ctrl->state == NVME_CTRL_DEAD)
|
||||
nvme_mark_namespaces_dead(ctrl);
|
||||
nvme_unquiesce_io_queues(ctrl);
|
||||
}
|
||||
|
||||
/* this is a no-op when called from the controller reset handler */
|
||||
nvme_change_ctrl_state(ctrl, NVME_CTRL_DELETING_NOIO);
|
||||
|
|
|
|||
|
|
@ -3402,7 +3402,8 @@ static const struct pci_device_id nvme_id_table[] = {
|
|||
{ PCI_DEVICE(0x1d97, 0x2263), /* SPCC */
|
||||
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
|
||||
{ PCI_DEVICE(0x144d, 0xa80b), /* Samsung PM9B1 256G and 512G */
|
||||
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
|
||||
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES |
|
||||
NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_DEVICE(0x144d, 0xa809), /* Samsung MZALQ256HBJD 256G */
|
||||
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
|
||||
{ PCI_DEVICE(0x144d, 0xa802), /* Samsung SM953 */
|
||||
|
|
|
|||
|
|
@ -883,6 +883,7 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new)
|
|||
goto out_cleanup_tagset;
|
||||
|
||||
if (!new) {
|
||||
nvme_start_freeze(&ctrl->ctrl);
|
||||
nvme_unquiesce_io_queues(&ctrl->ctrl);
|
||||
if (!nvme_wait_freeze_timeout(&ctrl->ctrl, NVME_IO_TIMEOUT)) {
|
||||
/*
|
||||
|
|
@ -891,6 +892,7 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new)
|
|||
* to be safe.
|
||||
*/
|
||||
ret = -ENODEV;
|
||||
nvme_unfreeze(&ctrl->ctrl);
|
||||
goto out_wait_freeze_timed_out;
|
||||
}
|
||||
blk_mq_update_nr_hw_queues(ctrl->ctrl.tagset,
|
||||
|
|
@ -940,7 +942,6 @@ static void nvme_rdma_teardown_io_queues(struct nvme_rdma_ctrl *ctrl,
|
|||
bool remove)
|
||||
{
|
||||
if (ctrl->ctrl.queue_count > 1) {
|
||||
nvme_start_freeze(&ctrl->ctrl);
|
||||
nvme_quiesce_io_queues(&ctrl->ctrl);
|
||||
nvme_sync_io_queues(&ctrl->ctrl);
|
||||
nvme_rdma_stop_io_queues(ctrl);
|
||||
|
|
|
|||
|
|
@ -1868,6 +1868,7 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)
|
|||
goto out_cleanup_connect_q;
|
||||
|
||||
if (!new) {
|
||||
nvme_start_freeze(ctrl);
|
||||
nvme_unquiesce_io_queues(ctrl);
|
||||
if (!nvme_wait_freeze_timeout(ctrl, NVME_IO_TIMEOUT)) {
|
||||
/*
|
||||
|
|
@ -1876,6 +1877,7 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)
|
|||
* to be safe.
|
||||
*/
|
||||
ret = -ENODEV;
|
||||
nvme_unfreeze(ctrl);
|
||||
goto out_wait_freeze_timed_out;
|
||||
}
|
||||
blk_mq_update_nr_hw_queues(ctrl->tagset,
|
||||
|
|
@ -1980,7 +1982,6 @@ static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl,
|
|||
if (ctrl->queue_count <= 1)
|
||||
return;
|
||||
nvme_quiesce_admin_queue(ctrl);
|
||||
nvme_start_freeze(ctrl);
|
||||
nvme_quiesce_io_queues(ctrl);
|
||||
nvme_sync_io_queues(ctrl);
|
||||
nvme_tcp_stop_io_queues(ctrl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user