| From foo@baz Fri 31 May 2019 03:55:52 PM PDT |
| From: Michael Chan <michael.chan@broadcom.com> |
| Date: Wed, 22 May 2019 19:12:54 -0400 |
| Subject: bnxt_en: Fix aggregation buffer leak under OOM condition. |
| |
| From: Michael Chan <michael.chan@broadcom.com> |
| |
| [ Upstream commit 296d5b54163964b7ae536b8b57dfbd21d4e868e1 ] |
| |
| For every RX packet, the driver replenishes all buffers used for that |
| packet and puts them back into the RX ring and RX aggregation ring. |
| In one code path where the RX packet has one RX buffer and one or more |
| aggregation buffers, we missed recycling the aggregation buffer(s) if |
| we are unable to allocate a new SKB buffer. This leads to the |
| aggregation ring slowly running out of buffers over time. Fix it |
| by properly recycling the aggregation buffers. |
| |
| Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") |
| Reported-by: Rakesh Hemnani <rhemnani@fb.com> |
| Signed-off-by: Michael Chan <michael.chan@broadcom.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
| +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c |
| @@ -1140,6 +1140,8 @@ static int bnxt_rx_pkt(struct bnxt *bp, |
| skb = bnxt_copy_skb(bnapi, data, len, dma_addr); |
| bnxt_reuse_rx_data(rxr, cons, data); |
| if (!skb) { |
| + if (agg_bufs) |
| + bnxt_reuse_rx_agg_bufs(bnapi, cp_cons, agg_bufs); |
| rc = -ENOMEM; |
| goto next_rx; |
| } |