diff options
author | Bart Van Assche <bart.vanassche@sandisk.com> | 2017-01-10 11:15:49 -0800 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-01-10 16:52:47 -0500 |
commit | 723ec9ae2adfe638d4e2bbc44dd3974ac974a6c6 (patch) | |
tree | 79a52620c25bfa3132db7e2fdec1b93d6f62e34f /drivers/infiniband/sw/rxe/rxe_resp.c | |
parent | IB/rxe: Add a runtime check in alloc_index() (diff) | |
download | linux-dev-723ec9ae2adfe638d4e2bbc44dd3974ac974a6c6.tar.xz linux-dev-723ec9ae2adfe638d4e2bbc44dd3974ac974a6c6.zip |
IB/rxe: Introduce functions for queue draining
This change makes the code easier to read and avoids that code is
duplicated.
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Reviewed-by: Andrew Boyer <andrew.boyer@dell.com>
Cc: Moni Shoua <monis@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/sw/rxe/rxe_resp.c')
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_resp.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index 6dbd069689fc..51c134dbc6c8 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -1207,6 +1207,19 @@ static enum resp_states do_class_d1e_error(struct rxe_qp *qp) } } +static void rxe_drain_req_pkts(struct rxe_qp *qp) +{ + struct sk_buff *skb; + + while ((skb = skb_dequeue(&qp->req_pkts))) { + rxe_drop_ref(qp); + kfree_skb(skb); + } + + while (!qp->srq && qp->rq.queue && queue_head(qp->rq.queue)) + advance_consumer(qp->rq.queue); +} + int rxe_responder(void *arg) { struct rxe_qp *qp = (struct rxe_qp *)arg; @@ -1374,21 +1387,10 @@ int rxe_responder(void *arg) goto exit; - case RESPST_RESET: { - struct sk_buff *skb; - - while ((skb = skb_dequeue(&qp->req_pkts))) { - rxe_drop_ref(qp); - kfree_skb(skb); - } - - while (!qp->srq && qp->rq.queue && - queue_head(qp->rq.queue)) - advance_consumer(qp->rq.queue); - + case RESPST_RESET: + rxe_drain_req_pkts(qp); qp->resp.wqe = NULL; goto exit; - } case RESPST_ERROR: qp->resp.goto_error = 0; |