IB/srp: Fix possible send queue overflow
authorSagi Grimberg <sagig@mellanox.com>
Tue, 1 Dec 2015 18:18:03 +0000 (10:18 -0800)
committerDoug Ledford <dledford@redhat.com>
Mon, 7 Dec 2015 22:20:11 +0000 (17:20 -0500)
When using work request based memory registration (fast_reg)
we must reserve SQ entries for registration and invalidation
in addition to send operations. Each IO consumes 3 SQ entries
(registration, send, invalidation) so we need to allocate 3x
larger send-queue instead of 2x.

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
CC: Stable <stable@vger.kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/ulp/srp/ib_srp.c

index a074dad28bab00380e979e17a16896a72276a1e8..c7a95d2dc1646d482aa049c2fe6489b94cbc9243 100644 (file)
@@ -488,7 +488,7 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
        struct ib_qp *qp;
        struct ib_fmr_pool *fmr_pool = NULL;
        struct srp_fr_pool *fr_pool = NULL;
-       const int m = 1 + dev->use_fast_reg;
+       const int m = dev->use_fast_reg ? 3 : 1;
        struct ib_cq_init_attr cq_attr = {};
        int ret;