nvme: enable aen regardless of the presence of I/O queues
authorSagi Grimberg <sagi@grimberg.me>
Thu, 22 Aug 2019 18:25:46 +0000 (11:25 -0700)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 12 Sep 2019 15:50:46 +0000 (08:50 -0700)
AENs in general are not related to the presence of I/O queues,
so enable them regardless. Note that the only exception is that
discovery controller will not support any of the requested AENs
and nvme_enable_aen will respect that and return, so it is still
safe to enable regardless.

Note it is safe to enable AENs even before the initial namespace
scanning as we have the scan operation in a workqueue context.

Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/core.c

index 55fc0728764e9dccb0a9f7df87e86ed1ee438d9a..573e72139331244a88c7539f57cee31817da70c5 100644 (file)
@@ -1200,6 +1200,8 @@ static void nvme_enable_aen(struct nvme_ctrl *ctrl)
        if (status)
                dev_warn(ctrl->device, "Failed to configure AEN (cfg %x)\n",
                         supported_aens);
+
+       queue_work(nvme_wq, &ctrl->async_event_work);
 }
 
 static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
@@ -3785,10 +3787,10 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)
        if (ctrl->kato)
                nvme_start_keep_alive(ctrl);
 
+       nvme_enable_aen(ctrl);
+
        if (ctrl->queue_count > 1) {
                nvme_queue_scan(ctrl);
-               nvme_enable_aen(ctrl);
-               queue_work(nvme_wq, &ctrl->async_event_work);
                nvme_start_queues(ctrl);
        }
 }