FAILED: patch "[PATCH] nvme-multipath: fix double initialization of ANA state" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5e1f689913a4498e3081093670ef9d85b2c60920 Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Thu, 29 Apr 2021 14:18:53 +0200
Subject: [PATCH] nvme-multipath: fix double initialization of ANA state
nvme_init_identify and thus nvme_mpath_init can be called multiple times and thus must not overwrite potentially initialized or in-use fields. Split out a helper for the basic initialization when the controller is initialized and make sure the init_identify path does not blindly change in-use data structures.
drivers/nvme/host/core.c +2 -1
@@ -2901,7 +2901,7 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl) ctrl->hmmaxd =le16_to_cpu (id->hmmaxd); } - ret =nvme_mpath_init (ctrl, id); + ret =nvme_mpath_init_identify (ctrl, id);if (ret <0 ) goto out_free;
@@ -4364,6 +4364,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, min(default_ps_max_latency_us, (unsigned long)S32_MAX));nvme_fault_inject_init (&ctrl->fault_inject,dev_name (ctrl->device)); +nvme_mpath_init_ctrl (ctrl);return 0 ; out_free_name:
drivers/nvme/host/multipath.c +29 -26
75 lines not on this page · raw message
drivers/nvme/host/nvme.h +6 -2
@@ -712,7 +712,8 @@ void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl);int nvme_mpath_alloc_disk (struct nvme_ctrl *ctrl,struct nvme_ns_head *head);void nvme_mpath_add_disk (struct nvme_ns *ns,struct nvme_id_ns *id);void nvme_mpath_remove_disk (struct nvme_ns_head *head); -int nvme_mpath_init (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id); +int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id); +void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl);void nvme_mpath_uninit (struct nvme_ctrl *ctrl);void nvme_mpath_stop (struct nvme_ctrl *ctrl);bool nvme_mpath_clear_current_path (struct nvme_ns *ns);
@@ -780,7 +781,10 @@ static inline void nvme_mpath_check_last_path(struct nvme_ns *ns)static inline void nvme_trace_bio_complete (struct request *req) { } -static inline int nvme_mpath_init (struct nvme_ctrl *ctrl, +static inline void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl) +{ +} +static inline int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id) {if (ctrl->subsys->cmic &NVME_CTRL_CMIC_ANA )