Skip to content

Commit 7d4a119

Browse files
minhbq-99Paolo Abeni
authored andcommitted
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 <[email protected]> Acked-by: Jason Wang <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 4be2193 commit 7d4a119

File tree

1 file changed

+7
-27
lines changed

1 file changed

+7
-27
lines changed

drivers/net/virtio_net.c

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2156,7 +2156,6 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev,
21562156
struct virtnet_rq_stats *stats)
21572157
{
21582158
struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
2159-
unsigned int headroom, tailroom, room;
21602159
struct skb_shared_info *shinfo;
21612160
unsigned int xdp_frags_truesz = 0;
21622161
unsigned int truesize;
@@ -2202,20 +2201,14 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev,
22022201
page = virt_to_head_page(buf);
22032202
offset = buf - page_address(page);
22042203

2205-
truesize = mergeable_ctx_to_truesize(ctx);
2206-
headroom = mergeable_ctx_to_headroom(ctx);
2207-
tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
2208-
room = SKB_DATA_ALIGN(headroom + tailroom);
2209-
2210-
xdp_frags_truesz += truesize;
2211-
if (unlikely(len > truesize - room)) {
2204+
if (check_mergeable_len(dev, ctx, len)) {
22122205
put_page(page);
2213-
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
2214-
dev->name, len, (unsigned long)(truesize - room));
2215-
DEV_STATS_INC(dev, rx_length_errors);
22162206
goto err;
22172207
}
22182208

2209+
truesize = mergeable_ctx_to_truesize(ctx);
2210+
xdp_frags_truesz += truesize;
2211+
22192212
frag = &shinfo->frags[shinfo->nr_frags++];
22202213
skb_frag_fill_page_desc(frag, page, offset, len);
22212214
if (page_is_pfmemalloc(page))
@@ -2429,18 +2422,12 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
24292422
struct sk_buff *head_skb, *curr_skb;
24302423
unsigned int truesize = mergeable_ctx_to_truesize(ctx);
24312424
unsigned int headroom = mergeable_ctx_to_headroom(ctx);
2432-
unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
2433-
unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
24342425

24352426
head_skb = NULL;
24362427
u64_stats_add(&stats->bytes, len - vi->hdr_len);
24372428

2438-
if (unlikely(len > truesize - room)) {
2439-
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
2440-
dev->name, len, (unsigned long)(truesize - room));
2441-
DEV_STATS_INC(dev, rx_length_errors);
2429+
if (check_mergeable_len(dev, ctx, len))
24422430
goto err_skb;
2443-
}
24442431

24452432
if (unlikely(vi->xdp_enabled)) {
24462433
struct bpf_prog *xdp_prog;
@@ -2475,17 +2462,10 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
24752462
u64_stats_add(&stats->bytes, len);
24762463
page = virt_to_head_page(buf);
24772464

2478-
truesize = mergeable_ctx_to_truesize(ctx);
2479-
headroom = mergeable_ctx_to_headroom(ctx);
2480-
tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
2481-
room = SKB_DATA_ALIGN(headroom + tailroom);
2482-
if (unlikely(len > truesize - room)) {
2483-
pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
2484-
dev->name, len, (unsigned long)(truesize - room));
2485-
DEV_STATS_INC(dev, rx_length_errors);
2465+
if (check_mergeable_len(dev, ctx, len))
24862466
goto err_skb;
2487-
}
24882467

2468+
truesize = mergeable_ctx_to_truesize(ctx);
24892469
curr_skb = virtnet_skb_append_frag(head_skb, curr_skb, page,
24902470
buf, len, truesize);
24912471
if (!curr_skb)

0 commit comments

Comments
 (0)