FAILED: patch "[PATCH] nvme-auth: use workqueue dedicated to authentication" failed to apply to 6.1-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.1-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]>.
Possible dependencies:
bd97a59da6a8 ("nvme-auth: use workqueue dedicated to authentication") aa36d711e945 ("nvme-auth: convert dhchap_auth_list to an array")8d1c1904e947 ("nvme-auth: clear sensitive info right after authentication completes") e481fc0a3777 ("nvme-auth: guarantee dhchap buffers under memory pressure") b7d604cae8f6 ("nvme-auth: don't keep long lived 4k dhchap buffer") bfc4068e1e55 ("nvme-auth: remove redundant if statement")01604350e145 ("nvme-auth: don't override ctrl keys before validation") 193a8c7e5f1a ("nvme-auth: don't ignore key generation failures when initializing ctrl keys") f6b182fbd5c6 ("nvme-auth: remove redundant buffer deallocations") 0c999e69c40a ("nvme-auth: rename authentication work elements")0a7ce375f83f ("nvme-auth: rename __nvme_auth_[reset|free] to nvme_auth[reset|free]_dhchap")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bd97a59da6a866e3dee5d2a2d582ec71dbbc84cd Mon Sep 17 00:00:00 2001
From: Shin'ichiro Kawasaki <[email protected]>
Date: Tue, 31 Jan 2023 18:26:44 +0900
Subject: [PATCH] nvme-auth: use workqueue dedicated to authentication
NVMe In-Band authentication uses two kinds of works: chap->auth_work and ctrl->dhchap_auth_work. The latter work flushes or cancels the former work. However, the both works are queued to the same workqueue nvme-wq. It results in the lockdep WARNING as follows:
WARNING: possible recursive locking detected
6.2.0-rc4+ #1 Not tainted
--------------------------------------------
kworker/u16:7/69 is trying to acquire lock:
ffff902d52e65548 ((wq_completion)nvme-wq){+.+.}-{0:0}, at: start_flush_work+0x2c5/0x380
but task is already holding lock:
ffff902d52e65548 ((wq_completion)nvme-wq){+.+.}-{0:0}, at: process_one_work+0x210/0x410
To avoid the WARNING, introduce a new workqueue nvme-auth-wq dedicated to chap->auth_work.
drivers/nvme/host/auth.c +12 -2
@@ -45,6 +45,8 @@ struct nvme_dhchap_queue_context {int sess_key_len; }; +struct workqueue_struct *nvme_auth_wq; +#define nvme_auth_flags_from_qid (qid) \ (qid == 0) ? 0 : BLK_MQ_REQ_NOWAIT | BLK_MQ_REQ_RESERVED#define nvme_auth_queue_from_qid (ctrl, qid) \
@@ -866,7 +868,7 @@ int nvme_auth_negotiate(struct nvme_ctrl *ctrl, int qid) chap = &ctrl->dhchap_ctxs[qid];cancel_work_sync (&chap->auth_work); -queue_work (nvme_wq, &chap->auth_work); +queue_work (nvme_auth_wq, &chap->auth_work);return 0 ; }EXPORT_SYMBOL_GPL (nvme_auth_negotiate);
@@ -1008,10 +1010,15 @@ EXPORT_SYMBOL_GPL(nvme_auth_free);int __init nvme_init_auth (void ) { + nvme_auth_wq =alloc_workqueue ("nvme-auth-wq" , +WQ_UNBOUND |WQ_MEM_RECLAIM |WQ_SYSFS ,0 ); +if (!nvme_auth_wq) +return -ENOMEM ; + nvme_chap_buf_cache =kmem_cache_create ("nvme-chap-buf-cache" ,CHAP_BUF_SIZE ,0 ,SLAB_HWCACHE_ALIGN ,NULL );if (!nvme_chap_buf_cache) -return -ENOMEM ; + goto err_destroy_workqueue; nvme_chap_buf_pool =mempool_create (16 , mempool_alloc_slab, mempool_free_slab, nvme_chap_buf_cache);
@@ -1021,6 +1028,8 @@ int __init nvme_init_auth(void)return 0 ; err_destroy_chap_buf_cache:kmem_cache_destroy (nvme_chap_buf_cache); +err_destroy_workqueue: +destroy_workqueue (nvme_auth_wq);return -ENOMEM ; }
@@ -1028,4 +1037,5 @@ void __exit nvme_exit_auth(void) {mempool_destroy (nvme_chap_buf_pool);kmem_cache_destroy (nvme_chap_buf_cache); +destroy_workqueue (nvme_auth_wq); }