]> www.infradead.org Git - users/jedix/linux-maple.git/commit
IB/mlx4: Fix CM REQ retries in paravirt mode
authorHåkon Bugge <Haakon.Bugge@oracle.com>
Mon, 19 Jun 2017 10:23:03 +0000 (12:23 +0200)
committerChuck Anderson <chuck.anderson@oracle.com>
Fri, 23 Jun 2017 04:20:00 +0000 (21:20 -0700)
commit01f47882225a571c5ee8e7d018639a67c180baea
tree9836ef1d3467fb6ce1c29049c8cb7ae1c3bbb639
parent6c56cb5dcabcf9038cf52280df664f1b823c3a36
IB/mlx4: Fix CM REQ retries in paravirt mode

CM REQs cannot be successfully retried, because a new pv_cm_id is
created for each request, without checking if one already exists.

This commit fixes this, by checking if an id exists before creating
one.

This bug can be provoked by running an RDMA CM user-land application,
but inserting a five seconds delay before the rdma_accept() call on
the passive side. This delay is larger than the default CMA timeout,
and triggers a retry from the active side. The retried REQ will use
another pv_cm_id (the cm_id on the wire). This confuses the CM
protocol and two REJs are sent from the passive side.

This commit is required to achieve the reduced HA Brownout time,
needed by Exadata. The Brownout issue is tracked by orabug 25521901.

Orabug: 26287667

Suggested-by: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com>
Reported-by: Wei Lin Guay <wei.lin.guay@oracle.com>
Tested-by: Wei Lin Guay <wei.lin.guay@oracle.com>
Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com>
drivers/infiniband/hw/mlx4/cm.c