Additionally, make it easier to detect skb leaks by issuing a warning if a leak occurs. Signed-off-by: Bart Van Assche Cc: Moni Shoua Cc: Andrew Boyer ---  drivers/infiniband/sw/rxe/rxe_comp.c | 15 ++++++++++++++-  1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c index d1c3411c5478..bbc7cd39f978 100644 --- a/drivers/infiniband/sw/rxe/rxe_comp.c +++ b/drivers/infiniband/sw/rxe/rxe_comp.c @@ -622,6 +622,7 @@ int rxe_completer(void *arg)   if (pkt) {   rxe_drop_ref(pkt->qp);   kfree_skb(skb); + skb = NULL;   }   goto done;   @@ -645,6 +646,7 @@ int rxe_completer(void *arg)       qp->qp_timeout_jiffies)   mod_timer(&qp->retrans_timer,     jiffies + qp->qp_timeout_jiffies); + WARN_ON_ONCE(skb);   goto exit;     case COMPST_ERROR_RETRY: @@ -657,8 +659,10 @@ int rxe_completer(void *arg)    */     /* there is nothing to retry in this case */ - if (!wqe || (wqe->state == wqe_state_posted)) + if (!wqe || (wqe->state == wqe_state_posted)) { + WARN_ON_ONCE(skb);   goto exit; + }     if (qp->comp.retry_cnt > 0) {   if (qp->comp.retry_cnt != 7) @@ -680,8 +684,10 @@ int rxe_completer(void *arg)   if (pkt) {   rxe_drop_ref(pkt->qp);   kfree_skb(skb); + skb = NULL;   }   + WARN_ON_ONCE(skb);   goto exit;     } else { @@ -701,6 +707,9 @@ int rxe_completer(void *arg)   mod_timer(&qp->rnr_nak_timer,     jiffies + rnrnak_jiffies(aeth_syn(pkt)   & ~AETH_TYPE_MASK)); + rxe_drop_ref(pkt->qp); + kfree_skb(skb); + skb = NULL;   goto exit;   } else {   wqe->status = IB_WC_RNR_RETRY_EXC_ERR; @@ -716,8 +725,10 @@ int rxe_completer(void *arg)   if (pkt) {   rxe_drop_ref(pkt->qp);   kfree_skb(skb); + skb = NULL;   }   + WARN_ON_ONCE(skb);   goto exit;   }   } @@ -726,6 +737,7 @@ int rxe_completer(void *arg)   /* we come here if we are done with processing and want the task to    * exit from the loop calling us    */ + WARN_ON_ONCE(skb);   rxe_drop_ref(qp);   return -EAGAIN;   @@ -733,6 +745,7 @@ int rxe_completer(void *arg)   /* we come here if we have processed a packet we want the task to call    * us again to see if there is anything else to do    */ + WARN_ON_ONCE(skb);   rxe_drop_ref(qp);   return 0;  } --  2.11.0 NrybXǧv^)޺{.n+{ٚ{ayʇڙ,jfh/oScڳ9u&jw(階ݢj"mzޖfh~m