Commit 53432671 authored by Praveen Kaligineedi's avatar Praveen Kaligineedi Committed by Jakub Kicinski

gve: Fix skb truesize underestimation

For a skb frag with a newly allocated copy page, the true size is
incorrectly set to packet buffer size. It should be set to PAGE_SIZE
instead.

Fixes: 82fd151d ("gve: Reduce alloc and copy costs in the GQ rx path")
Signed-off-by: default avatarPraveen Kaligineedi <pkaligineedi@google.com>
Link: https://lore.kernel.org/r/20240124161025.1819836-1-pkaligineedi@google.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent fc836129
...@@ -356,7 +356,7 @@ static enum pkt_hash_types gve_rss_type(__be16 pkt_flags) ...@@ -356,7 +356,7 @@ static enum pkt_hash_types gve_rss_type(__be16 pkt_flags)
static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi, static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi,
struct gve_rx_slot_page_info *page_info, struct gve_rx_slot_page_info *page_info,
u16 packet_buffer_size, u16 len, unsigned int truesize, u16 len,
struct gve_rx_ctx *ctx) struct gve_rx_ctx *ctx)
{ {
u32 offset = page_info->page_offset + page_info->pad; u32 offset = page_info->page_offset + page_info->pad;
...@@ -389,10 +389,10 @@ static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi, ...@@ -389,10 +389,10 @@ static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi,
if (skb != ctx->skb_head) { if (skb != ctx->skb_head) {
ctx->skb_head->len += len; ctx->skb_head->len += len;
ctx->skb_head->data_len += len; ctx->skb_head->data_len += len;
ctx->skb_head->truesize += packet_buffer_size; ctx->skb_head->truesize += truesize;
} }
skb_add_rx_frag(skb, num_frags, page_info->page, skb_add_rx_frag(skb, num_frags, page_info->page,
offset, len, packet_buffer_size); offset, len, truesize);
return ctx->skb_head; return ctx->skb_head;
} }
...@@ -486,7 +486,7 @@ static struct sk_buff *gve_rx_copy_to_pool(struct gve_rx_ring *rx, ...@@ -486,7 +486,7 @@ static struct sk_buff *gve_rx_copy_to_pool(struct gve_rx_ring *rx,
memcpy(alloc_page_info.page_address, src, page_info->pad + len); memcpy(alloc_page_info.page_address, src, page_info->pad + len);
skb = gve_rx_add_frags(napi, &alloc_page_info, skb = gve_rx_add_frags(napi, &alloc_page_info,
rx->packet_buffer_size, PAGE_SIZE,
len, ctx); len, ctx);
u64_stats_update_begin(&rx->statss); u64_stats_update_begin(&rx->statss);
......
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