From: Ajaykumar Hotchandani Date: Thu, 16 Jun 2016 19:15:21 +0000 (-0700) Subject: RDS/IB: Fix crash in SRQ initialization X-Git-Tag: v4.1.12-92~133^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=83bb47984661e9fcc0cf2e66ba65787f41767092;p=users%2Fjedix%2Flinux-maple.git RDS/IB: Fix crash in SRQ initialization 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 Tested-by: jenny x.xu Acked-by: Santosh Shilimkar --- diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index 4a4c33f38e27..7739aaed9edb 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c @@ -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");