RDMA/rxe: Fix double unlock in rxe_qp.c
authorBob Pearson <rpearsonhpe@gmail.com>
Mon, 15 May 2023 20:10:57 +0000 (15:10 -0500)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 16 May 2023 19:52:45 +0000 (16:52 -0300)
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>
drivers/infiniband/sw/rxe/rxe_qp.c

index c5451a4..245dd36 100644 (file)
@@ -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;
 }