Skip to content

Commit d39aa49

Browse files
Christoph Hellwigaxboe
authored andcommitted
Revert "nvmet-rdma: use a private workqueue for delete"
This reverts commit 2acf70a. The commit never really fixed the intended issue and caused all kinds of other issues, including a use before initialization. Suggested-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 8f676b8 commit d39aa49

File tree

1 file changed

+4
-15
lines changed

1 file changed

+4
-15
lines changed

drivers/nvme/target/rdma.c

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ struct nvmet_rdma_device {
122122
int inline_page_count;
123123
};
124124

125-
static struct workqueue_struct *nvmet_rdma_delete_wq;
126125
static bool nvmet_rdma_use_srq;
127126
module_param_named(use_srq, nvmet_rdma_use_srq, bool, 0444);
128127
MODULE_PARM_DESC(use_srq, "Use shared receive queue.");
@@ -1274,12 +1273,12 @@ static int nvmet_rdma_queue_connect(struct rdma_cm_id *cm_id,
12741273

12751274
if (queue->host_qid == 0) {
12761275
/* Let inflight controller teardown complete */
1277-
flush_workqueue(nvmet_rdma_delete_wq);
1276+
flush_scheduled_work();
12781277
}
12791278

12801279
ret = nvmet_rdma_cm_accept(cm_id, queue, &event->param.conn);
12811280
if (ret) {
1282-
queue_work(nvmet_rdma_delete_wq, &queue->release_work);
1281+
schedule_work(&queue->release_work);
12831282
/* Destroying rdma_cm id is not needed here */
12841283
return 0;
12851284
}
@@ -1344,7 +1343,7 @@ static void __nvmet_rdma_queue_disconnect(struct nvmet_rdma_queue *queue)
13441343

13451344
if (disconnect) {
13461345
rdma_disconnect(queue->cm_id);
1347-
queue_work(nvmet_rdma_delete_wq, &queue->release_work);
1346+
schedule_work(&queue->release_work);
13481347
}
13491348
}
13501349

@@ -1374,7 +1373,7 @@ static void nvmet_rdma_queue_connect_fail(struct rdma_cm_id *cm_id,
13741373
mutex_unlock(&nvmet_rdma_queue_mutex);
13751374

13761375
pr_err("failed to connect queue %d\n", queue->idx);
1377-
queue_work(nvmet_rdma_delete_wq, &queue->release_work);
1376+
schedule_work(&queue->release_work);
13781377
}
13791378

13801379
/**
@@ -1656,25 +1655,15 @@ static int __init nvmet_rdma_init(void)
16561655
if (ret)
16571656
goto err_ib_client;
16581657

1659-
nvmet_rdma_delete_wq = alloc_workqueue("nvmet-rdma-delete-wq",
1660-
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
1661-
if (!nvmet_rdma_delete_wq) {
1662-
ret = -ENOMEM;
1663-
goto err_unreg_transport;
1664-
}
1665-
16661658
return 0;
16671659

1668-
err_unreg_transport:
1669-
nvmet_unregister_transport(&nvmet_rdma_ops);
16701660
err_ib_client:
16711661
ib_unregister_client(&nvmet_rdma_ib_client);
16721662
return ret;
16731663
}
16741664

16751665
static void __exit nvmet_rdma_exit(void)
16761666
{
1677-
destroy_workqueue(nvmet_rdma_delete_wq);
16781667
nvmet_unregister_transport(&nvmet_rdma_ops);
16791668
ib_unregister_client(&nvmet_rdma_ib_client);
16801669
WARN_ON_ONCE(!list_empty(&nvmet_rdma_queue_list));

0 commit comments

Comments
 (0)