mirror of https://github.com/torvalds/linux.git
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:
|
||
|---|---|---|
| .. | ||
| ib.h | ||
| ib_addr.h | ||
| ib_cache.h | ||
| ib_cm.h | ||
| ib_hdrs.h | ||
| ib_mad.h | ||
| ib_marshall.h | ||
| ib_pack.h | ||
| ib_pma.h | ||
| ib_sa.h | ||
| ib_smi.h | ||
| ib_umem.h | ||
| ib_umem_odp.h | ||
| ib_verbs.h | ||
| iba.h | ||
| ibta_vol1_c12.h | ||
| iw_cm.h | ||
| iw_portmap.h | ||
| lag.h | ||
| mr_pool.h | ||
| opa_addr.h | ||
| opa_port_info.h | ||
| opa_smi.h | ||
| opa_vnic.h | ||
| rdma_cm.h | ||
| rdma_cm_ib.h | ||
| rdma_counter.h | ||
| rdma_netlink.h | ||
| rdma_vt.h | ||
| rdmavt_cq.h | ||
| rdmavt_mr.h | ||
| rdmavt_qp.h | ||
| restrack.h | ||
| rw.h | ||
| signature.h | ||
| tid_rdma_defs.h | ||
| uverbs_ioctl.h | ||
| uverbs_named_ioctl.h | ||
| uverbs_std_types.h | ||
| uverbs_types.h | ||