]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
nvme-auth: have dhchap_auth_work wait for queues auth to complete
authorSagi Grimberg <sagi@grimberg.me>
Sun, 13 Nov 2022 11:24:22 +0000 (13:24 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 16 Nov 2022 07:36:36 +0000 (08:36 +0100)
It triggered the queue authentication work elements in parallel, but
the ctrl authentication work itself completes when all of them
completes. Hence wait for queues auth completions.

This also makes nvme_auth_stop simply a sync cancel of ctrl
dhchap_auth_work.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/auth.c

index c9b3f0056afc538a9f231711ba543b4fbd2971ec..bb0abbe4491cdc1283ce63f2ffed398bc2f069cf 100644 (file)
@@ -926,6 +926,12 @@ static void nvme_ctrl_auth_work(struct work_struct *work)
         * Failure is a soft-state; credentials remain valid until
         * the controller terminates the connection.
         */
+       for (q = 1; q < ctrl->queue_count; q++) {
+               ret = nvme_auth_wait(ctrl, q);
+               if (ret)
+                       dev_warn(ctrl->device,
+                                "qid %d: authentication failed\n", q);
+       }
 }
 
 int nvme_auth_init_ctrl(struct nvme_ctrl *ctrl)
@@ -976,14 +982,7 @@ EXPORT_SYMBOL_GPL(nvme_auth_init_ctrl);
 
 void nvme_auth_stop(struct nvme_ctrl *ctrl)
 {
-       struct nvme_dhchap_queue_context *chap;
-       int i;
-
        cancel_work_sync(&ctrl->dhchap_auth_work);
-       for (i = 0; i < ctrl_max_dhchaps(ctrl); i++) {
-               chap = &ctrl->dhchap_ctxs[i];
-               cancel_work_sync(&chap->auth_work);
-       }
 }
 EXPORT_SYMBOL_GPL(nvme_auth_stop);