• Lincoln Ramsay's avatar
    aquantia: Remove the build_skb path · 9bd2702d
    Lincoln Ramsay authored
    When performing IPv6 forwarding, there is an expectation that SKBs
    will have some headroom. When forwarding a packet from the aquantia
    driver, this does not always happen, triggering a kernel warning.
    
    aq_ring.c has this code (edited slightly for brevity):
    
    if (buff->is_eop && buff->len <= AQ_CFG_RX_FRAME_MAX - AQ_SKB_ALIGN) {
        skb = build_skb(aq_buf_vaddr(&buff->rxdata), AQ_CFG_RX_FRAME_MAX);
    } else {
        skb = napi_alloc_skb(napi, AQ_CFG_RX_HDR_SIZE);
    
    There is a significant difference between the SKB produced by these
    2 code paths. When napi_alloc_skb creates an SKB, there is a certain
    amount of headroom reserved. However, this is not done in the
    build_skb codepath.
    
    As the hardware buffer that build_skb is built around does not
    handle the presence of the SKB header, this code path is being
    removed and the napi_alloc_skb path will always be used. This code
    path does have to copy the packet header into the SKB, but it adds
    the packet data as a frag.
    
    Fixes: 018423e9 ("net: ethernet: aquantia: Add ring support code")
    Signed-off-by: default avatarLincoln Ramsay <lincoln.ramsay@opengear.com>
    Link: https://lore.kernel.org/r/MWHPR1001MB23184F3EAFA413E0D1910EC9E8FC0@MWHPR1001MB2318.namprd10.prod.outlook.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    9bd2702d
aq_ring.c 14.3 KB