summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagi Grimberg <sagi@grimberg.me>2017-03-21 16:29:49 +0200
committerJens Axboe <axboe@fb.com>2017-04-04 09:48:23 -0600
commit777dc82395de6e04b3a5fedcf153eb99bf5f1241 (patch)
tree6b05969ca0cde280547b51b337ea06b5da7fc26e
parentdc2ad16ab2c1351832b862f938e6e12a517e3c12 (diff)
downloadlinux-0-day-777dc82395de6e04b3a5fedcf153eb99bf5f1241.tar.gz
linux-0-day-777dc82395de6e04b3a5fedcf153eb99bf5f1241.tar.xz
nvmet-rdma: occasionally flush ongoing controller teardown
If we are attacked with establishments/teradowns we need to make sure we do not consume too much system memory. Thus let ongoing controller teardowns complete before accepting new controller establishments. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/nvme/target/rdma.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index ecc4fe8625612..88bb5814c264f 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -1199,6 +1199,11 @@ static int nvmet_rdma_queue_connect(struct rdma_cm_id *cm_id,
}
queue->port = cm_id->context;
+ if (queue->host_qid == 0) {
+ /* Let inflight controller teardown complete */
+ flush_scheduled_work();
+ }
+
ret = nvmet_rdma_cm_accept(cm_id, queue, &event->param.conn);
if (ret)
goto release_queue;