• Menglong Dong's avatar
    net: tipc: fix FB_MTU eat two pages · 0c6de0c9
    Menglong Dong authored
    FB_MTU is used in 'tipc_msg_build()' to alloc smaller skb when memory
    allocation fails, which can avoid unnecessary sending failures.
    
    The value of FB_MTU now is 3744, and the data size will be:
    
      (3744 + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) + \
        SKB_DATA_ALIGN(BUF_HEADROOM + BUF_TAILROOM + 3))
    
    which is larger than one page(4096), and two pages will be allocated.
    
    To avoid it, replace '3744' with a calculation:
    
      (PAGE_SIZE - SKB_DATA_ALIGN(BUF_OVERHEAD) - \
        SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
    
    What's more, alloc_skb_fclone() will call SKB_DATA_ALIGN for data size,
    and it's not necessary to make alignment for buf_size in
    tipc_buf_acquire(). So, just remove it.
    
    Fixes: 4c94cc2d ("tipc: fall back to smaller MTU if allocation of local send skb fails")
    Signed-off-by: default avatarMenglong Dong <dong.menglong@zte.com.cn>
    Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0c6de0c9
msg.c 22.5 KB