]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnxt: make sure we return pages to the pool
authorJakub Kicinski <kuba@kernel.org>
Wed, 11 Jan 2023 04:25:47 +0000 (20:25 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Jan 2023 04:48:37 +0000 (20:48 -0800)
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: 1dc4c557bfed ("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff")
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Link: https://lore.kernel.org/r/20230111042547.987749-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 16ce7a90610c5b44bac8eda7db256b728c18b56e..240a7e8a76528ce3615870a5248a453cbd905719 100644 (file)
@@ -993,7 +993,7 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct bnxt *bp,
                             DMA_ATTR_WEAK_ORDERING);
        skb = build_skb(page_address(page), PAGE_SIZE);
        if (!skb) {
-               __free_page(page);
+               page_pool_recycle_direct(rxr->page_pool, page);
                return NULL;
        }
        skb_mark_for_recycle(skb);
@@ -1031,7 +1031,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp,
 
        skb = napi_alloc_skb(&rxr->bnapi->napi, payload);
        if (!skb) {
-               __free_page(page);
+               page_pool_recycle_direct(rxr->page_pool, page);
                return NULL;
        }