[PATCH v2 2/2] nvme/mpath: fix crash in nvme_mpath_update for non-ana ctrl
Anton Eidelman
anton.eidelman at gmail.com
Wed Mar 23 17:30:08 PDT 2022
When CONFIG_NVME_MULTIPATH is enabled, the nvme_mpath_update()
is called from nvme_start_ctrl()
for both ANA and non-ANA ctrls and regardless of multipath on/off.
Unless multipath is on and the ctrl is ANA-enabled
the function will crash as the initializations
for ANA specific parts of the ctrl are skipped in such cases
in nvme_mpath_init_identify().
Fix: check as done in nvme_handle_aen_notice() for ana_work:
a NULL ctrl->ana_log_buf indicates ctrl does not have ANA.
Fixes: d50c992edf10 ("nvme-multipath: fix hang when disk goes live over reconnect")
Signed-off-by: Anton Eidelman <anton at lightbitslabs.com>
---
drivers/nvme/host/multipath.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index 12d4afde3662..f15badc0410a 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -712,11 +712,13 @@ static void nvme_ana_work(struct work_struct *work)
void nvme_mpath_update(struct nvme_ctrl *ctrl)
{
- u32 nr_change_groups = 0;
+ if (!ctrl->ana_log_buf) {
+ u32 nr_change_groups = 0;
- mutex_lock(&ctrl->ana_lock);
- nvme_parse_ana_log(ctrl, &nr_change_groups, nvme_update_ana_state);
- mutex_unlock(&ctrl->ana_lock);
+ mutex_lock(&ctrl->ana_lock);
+ nvme_parse_ana_log(ctrl, &nr_change_groups, nvme_update_ana_state);
+ mutex_unlock(&ctrl->ana_lock);
+ }
}
static void nvme_anatt_timeout(struct timer_list *t)
--
2.25.1
More information about the Linux-nvme
mailing list