Skip to content

Commit e8786b6

Browse files
mfijalkoKernel Patches Daemon
authored andcommitted
xsk: avoid overwriting skb fields for multi-buffer traffic
We are unnecessarily setting a bunch of skb fields per each processed descriptor, which is redundant for fragmented frames. Let us set these respective members for first fragment only. Signed-off-by: Maciej Fijalkowski <[email protected]>
1 parent 2225dd1 commit e8786b6

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

net/xdp/xsk.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,10 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
758758
goto free_err;
759759

760760
xsk_set_destructor_arg(skb, desc->addr);
761+
skb->dev = dev;
762+
skb->priority = READ_ONCE(xs->sk.sk_priority);
763+
skb->mark = READ_ONCE(xs->sk.sk_mark);
764+
skb->destructor = xsk_destruct_skb;
761765
} else {
762766
int nr_frags = skb_shinfo(skb)->nr_frags;
763767
struct xsk_addr_node *xsk_addr;
@@ -826,14 +830,10 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
826830

827831
if (meta->flags & XDP_TXMD_FLAGS_LAUNCH_TIME)
828832
skb->skb_mstamp_ns = meta->request.launch_time;
833+
xsk_tx_metadata_to_compl(meta, &skb_shinfo(skb)->xsk_meta);
829834
}
830835
}
831836

832-
skb->dev = dev;
833-
skb->priority = READ_ONCE(xs->sk.sk_priority);
834-
skb->mark = READ_ONCE(xs->sk.sk_mark);
835-
skb->destructor = xsk_destruct_skb;
836-
xsk_tx_metadata_to_compl(meta, &skb_shinfo(skb)->xsk_meta);
837837
xsk_inc_num_desc(skb);
838838

839839
return skb;

0 commit comments

Comments
 (0)