]> git.baikalelectronics.ru Git - kernel.git/commit
RDMA: Add rdma_connect_locked()
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 26 Oct 2020 14:25:49 +0000 (11:25 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 28 Oct 2020 12:14:49 +0000 (09:14 -0300)
commit5b70a7f4da9cbc483edd9492ac493e3bbb7338c0
tree0433f309f2aae8e868f09260cd1647671236af85
parentdbde492bec3e79e0142696a25e1f86c94acf81a0
RDMA: Add rdma_connect_locked()

There are two flows for handling RDMA_CM_EVENT_ROUTE_RESOLVED, either the
handler triggers a completion and another thread does rdma_connect() or
the handler directly calls rdma_connect().

In all cases rdma_connect() needs to hold the handler_mutex, but when
handler's are invoked this is already held by the core code. This causes
ULPs using the 2nd method to deadlock.

Provide a rdma_connect_locked() and have all ULPs call it from their
handlers.

Link: https://lore.kernel.org/r/0-v2-53c22d5c1405+33-rdma_connect_locking_jgg@nvidia.com
Reported-and-tested-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
Fixes: 1663a5ea463d ("RDMA/cma: Fix locking for the RDMA_CM_CONNECT state")
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/cma.c
drivers/infiniband/ulp/iser/iser_verbs.c
drivers/infiniband/ulp/rtrs/rtrs-clt.c
drivers/nvme/host/rdma.c
include/rdma/rdma_cm.h
net/rds/ib_cm.c