]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/rtrs: remove WQ_MEM_RECLAIM for rtrs_wq
authorJack Wang <jinpu.wang@cloud.ionos.com>
Fri, 24 Jul 2020 11:15:08 +0000 (16:45 +0530)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 29 Jul 2020 17:26:53 +0000 (14:26 -0300)
lockdep triggers a warning from time to time when running a regression
test:

 rnbd_client L685: </dev/nullb0@bla> Device disconnected.
 rnbd_client L1756: Unloading module

 workqueue: WQ_MEM_RECLAIM rtrs_client_wq:rtrs_clt_reconnect_work [rtrs_client] is flushing !WQ_MEM_RECLAIM ib_addr:process_one_req [ib_core]
 WARNING: CPU: 2 PID: 18824 at kernel/workqueue.c:2517 check_flush_dependency+0xad/0x130

The root cause is workqueue core expect flushing should not be done for a
!WQ_MEM_RECLAIM wq from a WQ_MEM_RECLAIM workqueue.

In above case ib_addr workqueue without WQ_MEM_RECLAIM, but rtrs_wq
WQ_MEM_RECLAIM.

To avoid the warning, remove the WQ_MEM_RECLAIM flag.

Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
Link: https://lore.kernel.org/r/20200724111508.15734-4-haris.iqbal@cloud.ionos.com
Signed-off-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: Md Haris Iqbal <haris.iqbal@cloud.ionos.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/ulp/rtrs/rtrs-clt.c
drivers/infiniband/ulp/rtrs/rtrs-srv.c

index 5b31d3b03737ca366db3f2e514eebfc4d6299946..776e89231c52f77a5096d46b2286c0f2377e2458 100644 (file)
@@ -2982,7 +2982,7 @@ static int __init rtrs_client_init(void)
                pr_err("Failed to create rtrs-client dev class\n");
                return PTR_ERR(rtrs_clt_dev_class);
        }
-       rtrs_wq = alloc_workqueue("rtrs_client_wq", WQ_MEM_RECLAIM, 0);
+       rtrs_wq = alloc_workqueue("rtrs_client_wq", 0, 0);
        if (!rtrs_wq) {
                class_destroy(rtrs_clt_dev_class);
                return -ENOMEM;
index 0d9241f5d9e68406a2e9b36aedc23cad08a0939e..a219bd1bdbc26525b3144356c1bc76080e67a273 100644 (file)
@@ -2150,7 +2150,7 @@ static int __init rtrs_server_init(void)
                err = PTR_ERR(rtrs_dev_class);
                goto out_chunk_pool;
        }
-       rtrs_wq = alloc_workqueue("rtrs_server_wq", WQ_MEM_RECLAIM, 0);
+       rtrs_wq = alloc_workqueue("rtrs_server_wq", 0, 0);
        if (!rtrs_wq) {
                err = -ENOMEM;
                goto out_dev_class;