]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS/IB: Fix crash in SRQ initialization
authorAjaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Thu, 16 Jun 2016 19:15:21 +0000 (12:15 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 23 Jun 2016 15:48:40 +0000 (08:48 -0700)
SRQ initialization causes crash when IC connection is not available.

Orabug: 23523586

This is regression fix for commit 0f0f08915.
We require more work to have SRQ working with variable fragment size.
For now, we fix crash in SRQ initialization.

This also adds warning when SRQ is enabled.
SRQ feature is experimental and disabled by default.
When any user enables it, we should give warning.

Signed-off-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Tested-by: jenny x.xu <jenny.x.xu@oracle.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
net/rds/ib_recv.c

index 4a4c33f38e2732cf551f1552508ffdd9d0368858..7739aaed9edbe40c7606e14e72ac0ac0d5552e3f 100644 (file)
@@ -516,8 +516,12 @@ static int rds_ib_srq_prefill_one(struct rds_ib_device *rds_ibdev,
        if (!recv->r_frag)
                goto out;
        sg_init_table(&recv->r_frag->f_sg, 1);
-       ret = rds_page_remainder_alloc(&recv->r_frag->f_sg,
-                       recv->r_ic->i_frag_sz, page_mask);
+       if (recv->r_ic)
+               ret = rds_page_remainder_alloc(&recv->r_frag->f_sg,
+                               recv->r_ic->i_frag_sz, page_mask);
+       else
+               ret = rds_page_remainder_alloc(&recv->r_frag->f_sg,
+                               RDS_FRAG_SIZE, page_mask);
        if (ret) {
                kmem_cache_free(rds_ib_frag_slab, recv->r_frag);
                goto out;
@@ -1596,6 +1600,8 @@ int rds_ib_srq_init(struct rds_ib_device *rds_ibdev)
        if (!rds_ib_srq_enabled)
                return 0;
 
+       pr_warn("RDS/IB: SRQ support is experimental\n");
+
        rds_ibdev->srq = kmalloc(sizeof(struct rds_ib_srq), GFP_KERNEL);
        if (!rds_ibdev->srq) {
                pr_warn("RDS: allocating srq failed\n");