mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-16 20:05:13 -05:00
virtio-net: use the check_mergeable_len helper
Replace the current repeated code to check received length in mergeable mode with the new check_mergeable_len helper. Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com> Acked-by: Jason Wang <jasowang@redhat.com> Link: https://patch.msgid.link/20250630144212.48471-4-minhquangbui99@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
4be2193b33
commit
7d4a119e45
@@ -2156,7 +2156,6 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev,
|
||||
struct virtnet_rq_stats *stats)
|
||||
{
|
||||
struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
|
||||
unsigned int headroom, tailroom, room;
|
||||
struct skb_shared_info *shinfo;
|
||||
unsigned int xdp_frags_truesz = 0;
|
||||
unsigned int truesize;
|
||||
@@ -2202,20 +2201,14 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev,
|
||||
page = virt_to_head_page(buf);
|
||||
offset = buf - page_address(page);
|
||||
|
||||
truesize = mergeable_ctx_to_truesize(ctx);
|
||||
headroom = mergeable_ctx_to_headroom(ctx);
|
||||
tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
|
||||
room = SKB_DATA_ALIGN(headroom + tailroom);
|
||||
|
||||
xdp_frags_truesz += truesize;
|
||||
if (unlikely(len > truesize - room)) {
|
||||
if (check_mergeable_len(dev, ctx, len)) {
|
||||
put_page(page);
|
||||
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
|
||||
dev->name, len, (unsigned long)(truesize - room));
|
||||
DEV_STATS_INC(dev, rx_length_errors);
|
||||
goto err;
|
||||
}
|
||||
|
||||
truesize = mergeable_ctx_to_truesize(ctx);
|
||||
xdp_frags_truesz += truesize;
|
||||
|
||||
frag = &shinfo->frags[shinfo->nr_frags++];
|
||||
skb_frag_fill_page_desc(frag, page, offset, len);
|
||||
if (page_is_pfmemalloc(page))
|
||||
@@ -2429,18 +2422,12 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
|
||||
struct sk_buff *head_skb, *curr_skb;
|
||||
unsigned int truesize = mergeable_ctx_to_truesize(ctx);
|
||||
unsigned int headroom = mergeable_ctx_to_headroom(ctx);
|
||||
unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
|
||||
unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
|
||||
|
||||
head_skb = NULL;
|
||||
u64_stats_add(&stats->bytes, len - vi->hdr_len);
|
||||
|
||||
if (unlikely(len > truesize - room)) {
|
||||
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
|
||||
dev->name, len, (unsigned long)(truesize - room));
|
||||
DEV_STATS_INC(dev, rx_length_errors);
|
||||
if (check_mergeable_len(dev, ctx, len))
|
||||
goto err_skb;
|
||||
}
|
||||
|
||||
if (unlikely(vi->xdp_enabled)) {
|
||||
struct bpf_prog *xdp_prog;
|
||||
@@ -2475,17 +2462,10 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
|
||||
u64_stats_add(&stats->bytes, len);
|
||||
page = virt_to_head_page(buf);
|
||||
|
||||
truesize = mergeable_ctx_to_truesize(ctx);
|
||||
headroom = mergeable_ctx_to_headroom(ctx);
|
||||
tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
|
||||
room = SKB_DATA_ALIGN(headroom + tailroom);
|
||||
if (unlikely(len > truesize - room)) {
|
||||
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
|
||||
dev->name, len, (unsigned long)(truesize - room));
|
||||
DEV_STATS_INC(dev, rx_length_errors);
|
||||
if (check_mergeable_len(dev, ctx, len))
|
||||
goto err_skb;
|
||||
}
|
||||
|
||||
truesize = mergeable_ctx_to_truesize(ctx);
|
||||
curr_skb = virtnet_skb_append_frag(head_skb, curr_skb, page,
|
||||
buf, len, truesize);
|
||||
if (!curr_skb)
|
||||
|
||||
Reference in New Issue
Block a user