Commit 97f5e03a authored by Jakub Kicinski's avatar Jakub Kicinski

bnxt: make sure we return pages to the pool

Before the commit under Fixes the page would have been released
from the pool before the napi_alloc_skb() call, so normal page
freeing was fine (released page == no longer in the pool).

After the change we just mark the page for recycling so it's still
in the pool if the skb alloc fails, we need to recycle.

Same commit added the same bug in the new bnxt_rx_multi_page_skb().

Fixes: 1dc4c557 ("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff")
Reviewed-by: default avatarAndy Gospodarek <gospo@broadcom.com>
Link: https://lore.kernel.org/r/20230111042547.987749-1-kuba@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent ae9f29fd
...@@ -993,7 +993,7 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct bnxt *bp, ...@@ -993,7 +993,7 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct bnxt *bp,
DMA_ATTR_WEAK_ORDERING); DMA_ATTR_WEAK_ORDERING);
skb = build_skb(page_address(page), PAGE_SIZE); skb = build_skb(page_address(page), PAGE_SIZE);
if (!skb) { if (!skb) {
__free_page(page); page_pool_recycle_direct(rxr->page_pool, page);
return NULL; return NULL;
} }
skb_mark_for_recycle(skb); skb_mark_for_recycle(skb);
...@@ -1031,7 +1031,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp, ...@@ -1031,7 +1031,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp,
skb = napi_alloc_skb(&rxr->bnapi->napi, payload); skb = napi_alloc_skb(&rxr->bnapi->napi, payload);
if (!skb) { if (!skb) {
__free_page(page); page_pool_recycle_direct(rxr->page_pool, page);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment