IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition
authorNiels Dossche <dossche.niels@gmail.com>
Mon, 28 Feb 2022 16:53:30 +0000 (17:53 +0100)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 4 Apr 2022 17:45:02 +0000 (14:45 -0300)
commit4d809f69695d4e7d1378b3a072fa9aef23123018
treea3292f1cb804d46dbd39a9303a75eee194c28f12
parent107dd7beba403a363adfeb3ffe3734fe38a05cce
IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition

The documentation of the function rvt_error_qp says both r_lock and s_lock
need to be held when calling that function.  It also asserts using lockdep
that both of those locks are held.  However, the commit I referenced in
Fixes accidentally makes the call to rvt_error_qp in rvt_ruc_loopback no
longer covered by r_lock.  This results in the lockdep assertion failing
and also possibly in a race condition.

Fixes: d757c60eca9b ("IB/rdmavt: Fix concurrency panics in QP post_send and modify to error")
Link: https://lore.kernel.org/r/20220228165330.41546-1-dossche.niels@gmail.com
Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
Acked-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/sw/rdmavt/qp.c