lkml.org 
[lkml]   [2015]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.1 096/123] rds: rds_ib_device.refcount overflow
    Date
    4.1-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Wengang Wang <wen.gang.wang@oracle.com>

    commit 4fabb59449aa44a585b3603ffdadd4c5f4d0c033 upstream.

    Fixes: 3e0249f9c05c ("RDS/IB: add refcount tracking to struct rds_ib_device")

    There lacks a dropping on rds_ib_device.refcount in case rds_ib_alloc_fmr
    failed(mr pool running out). this lead to the refcount overflow.

    A complain in line 117(see following) is seen. From vmcore:
    s_ib_rdma_mr_pool_depleted is 2147485544 and rds_ibdev->refcount is -2147475448.
    That is the evidence the mr pool is used up. so rds_ib_alloc_fmr is very likely
    to return ERR_PTR(-EAGAIN).

    115 void rds_ib_dev_put(struct rds_ib_device *rds_ibdev)
    116 {
    117 BUG_ON(atomic_read(&rds_ibdev->refcount) <= 0);
    118 if (atomic_dec_and_test(&rds_ibdev->refcount))
    119 queue_work(rds_wq, &rds_ibdev->free_work);
    120 }

    fix is to drop refcount when rds_ib_alloc_fmr failed.

    Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
    Reviewed-by: Haggai Eran <haggaie@mellanox.com>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/rds/ib_rdma.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/net/rds/ib_rdma.c
    +++ b/net/rds/ib_rdma.c
    @@ -759,8 +759,10 @@ void *rds_ib_get_mr(struct scatterlist *
    }

    ibmr = rds_ib_alloc_fmr(rds_ibdev);
    - if (IS_ERR(ibmr))
    + if (IS_ERR(ibmr)) {
    + rds_ib_dev_put(rds_ibdev);
    return ibmr;
    + }

    ret = rds_ib_map_fmr(rds_ibdev, ibmr, sg, nents);
    if (ret == 0)



    \
     
     \ /
      Last update: 2015-08-09 01:01    [W:4.112 / U:0.312 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site