• Max Gurtovoy's avatar
    nvme-rdma: remove redundant reference between ib_device and tagset · 87fd1253
    Max Gurtovoy authored
    In the past, before adding f41725bb ("nvme-rdma: Use mr pool") commit,
    we needed a reference on the ib_device as long as the tagset
    was alive, as the MRs in the request structures needed a valid ib_device.
    Now, we allocate/deallocate MR pool per QP and consume on demand.
    
    Also remove nvme_rdma_free_tagset function and use blk_mq_free_tag_set
    instead, as it unneeded anymore.
    
    This commit also fixes a memory leakage and possible segmentation fault.
    When configuring the system with NIC teaming (aka bonding), we use 1
    network interface to create an HA connection to the target side. In case
    one connection breaks down, nvme-rdma driver will get notification from
    rdma-cm layer that underlying address was change and will start error
    recovery process. During this process, we'll reconnect to the target
    via the second interface in the bond without destroying the tagset.
    This will cause a leakage of the initial rdma device (ndev) and miscount
    in the reference count of the new created rdma device (new ndev). In
    the final destruction (or in another error flow), we'll get a warning
    dump from the ib_dealloc_pd that we still have inflight MR's related to
    that pd. This happens becasue of the miscount of the reference tag of
    the rdma device and causing access violation to it's elements (some
    queues are not destroyed yet).
    Signed-off-by: default avatarMax Gurtovoy <maxg@mellanox.com>
    Signed-off-by: default avatarIsrael Rukshin <israelr@mellanox.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    87fd1253
rdma.c 52 KB