summaryrefslogtreecommitdiff
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorBob Pearson <rpearsonhpe@gmail.com>2023-05-15 23:10:57 +0300
committerJason Gunthorpe <jgg@nvidia.com>2023-05-16 22:52:45 +0300
commit17eabd6a044b57b2c1b5459eb9d11af3ea909e63 (patch)
tree39775cb75fe486c1569d5d0a35fe42194bc56a2e /drivers/infiniband
parent78b6a9a3f445e121ca08195084206cb8faa6999f (diff)
downloadlinux-17eabd6a044b57b2c1b5459eb9d11af3ea909e63.tar.xz
RDMA/rxe: Fix double unlock in rxe_qp.c
A recent patch can cause a double spin_unlock_bh() in rxe_qp_to_attr() at line 715 in rxe_qp.c. Move the 2nd unlock into the if statement. Fixes: f605f26ea196 ("RDMA/rxe: Protect QP state with qp->state_lock") Link: https://lore.kernel.org/r/20230515201056.1591140-1-rpearsonhpe@gmail.com Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Closes: https://lore.kernel.org/r/27773078-40ce-414f-8b97-781954da9f25@kili.mountain Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/sw/rxe/rxe_qp.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index c5451a4488ca..245dd36638c7 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -712,8 +712,9 @@ int rxe_qp_to_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask)
if (qp->attr.sq_draining) {
spin_unlock_bh(&qp->state_lock);
cond_resched();
+ } else {
+ spin_unlock_bh(&qp->state_lock);
}
- spin_unlock_bh(&qp->state_lock);
return 0;
}