From: Sagi Grimberg Date: Sun, 29 Oct 2017 12:21:02 +0000 (+0200) Subject: nvme: flush reset_work before safely continuing with delete operation X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=4054637c9b4fbe9feef0cf6f2516ef00d8053560;p=openwrt%2Fstaging%2Fblogic.git nvme: flush reset_work before safely continuing with delete operation Prevent racing controller reset and delete flows. reset_work must not ever self-requeue so flushing it suffices. Reported-by: Christoph Hellwig Signed-off-by: Sagi Grimberg Signed-off-by: Christoph Hellwig --- diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 4fa748c9a3f6..003314eb6341 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -102,6 +102,7 @@ static void nvme_delete_ctrl_work(struct work_struct *work) struct nvme_ctrl *ctrl = container_of(work, struct nvme_ctrl, delete_work); + flush_work(&ctrl->reset_work); nvme_stop_ctrl(ctrl); nvme_remove_namespaces(ctrl); ctrl->ops->delete_ctrl(ctrl); diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index e447b532b9ee..6a025a8d8c32 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -2638,7 +2638,6 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl) { struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl); - cancel_work_sync(&ctrl->ctrl.reset_work); cancel_delayed_work_sync(&ctrl->connect_work); /* * kill the association on the link side. this will block