RDMA/rxe: Check rxe_get() return value
In the tasklets (completer, responder, and requester) check the return value from rxe_get() to detect failures to get a reference. This only occurs if the qp has had its reference count drop to zero which indicates that it no longer should be used. The ref is never 0 today because the tasklets are flushed before the ref is dropped. The next patch changes this so that the ref is dropped then the tasklets are flushed. Link: https://lore.kernel.org/r/20220421014042.26985-4-rpearsonhpe@gmail.com Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
Родитель
b2a41678fc
Коммит
4e05a4b329
|
@ -562,7 +562,8 @@ int rxe_completer(void *arg)
|
|||
enum comp_state state;
|
||||
int ret = 0;
|
||||
|
||||
rxe_get(qp);
|
||||
if (!rxe_get(qp))
|
||||
return -EAGAIN;
|
||||
|
||||
if (!qp->valid || qp->req.state == QP_STATE_ERROR ||
|
||||
qp->req.state == QP_STATE_RESET) {
|
||||
|
|
|
@ -606,7 +606,8 @@ int rxe_requester(void *arg)
|
|||
struct rxe_ah *ah;
|
||||
struct rxe_av *av;
|
||||
|
||||
rxe_get(qp);
|
||||
if (!rxe_get(qp))
|
||||
return -EAGAIN;
|
||||
|
||||
next_wqe:
|
||||
if (unlikely(!qp->valid || qp->req.state == QP_STATE_ERROR))
|
||||
|
|
|
@ -1247,7 +1247,8 @@ int rxe_responder(void *arg)
|
|||
struct rxe_pkt_info *pkt = NULL;
|
||||
int ret = 0;
|
||||
|
||||
rxe_get(qp);
|
||||
if (!rxe_get(qp))
|
||||
return -EAGAIN;
|
||||
|
||||
qp->resp.aeth_syndrome = AETH_ACK_UNLIMITED;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче