Add helper for calling skb_{put|reserve} to reduce repetitive pattern across various drivers. Plumb into tap and tun to start. No functional change intended. Signed-off-by: Jon Kohler <jon@xxxxxxxxxxx> --- drivers/net/tap.c | 3 +-- drivers/net/tun.c | 3 +-- include/net/xdp.h | 8 ++++++++ net/core/xdp.c | 3 +-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/net/tap.c b/drivers/net/tap.c index d4ece538f1b2..54ce492da5e9 100644 --- a/drivers/net/tap.c +++ b/drivers/net/tap.c @@ -1062,8 +1062,7 @@ static int tap_get_user_xdp(struct tap_queue *q, struct xdp_buff *xdp) goto err; } - skb_reserve(skb, xdp->data - xdp->data_hard_start); - skb_put(skb, xdp->data_end - xdp->data); + xdp_skb_reserve_put(xdp, skb); skb_set_network_header(skb, ETH_HLEN); skb_reset_mac_header(skb); diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 7babd1e9a378..30701ad5c27d 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2415,8 +2415,7 @@ static int tun_xdp_one(struct tun_struct *tun, goto out; } - skb_reserve(skb, xdp->data - xdp->data_hard_start); - skb_put(skb, xdp->data_end - xdp->data); + xdp_skb_reserve_put(xdp, skb); /* The externally provided xdp_buff may have no metadata support, which * is marked by xdp->data_meta being xdp->data + 1. This will lead to a diff --git a/include/net/xdp.h b/include/net/xdp.h index 48efacbaa35d..0e7414472464 100644 --- a/include/net/xdp.h +++ b/include/net/xdp.h @@ -345,6 +345,14 @@ struct sk_buff *xdp_build_skb_from_frame(struct xdp_frame *xdpf, struct net_device *dev); struct xdp_frame *xdpf_clone(struct xdp_frame *xdpf); +static __always_inline +void xdp_skb_reserve_put(const struct xdp_buff *xdp, + struct sk_buff *skb) +{ + skb_reserve(skb, xdp->data - xdp->data_hard_start); + __skb_put(skb, xdp->data_end - xdp->data); +} + static inline void xdp_convert_frame_to_buff(const struct xdp_frame *frame, struct xdp_buff *xdp) diff --git a/net/core/xdp.c b/net/core/xdp.c index f86eedad586a..1fca2aa1d1fe 100644 --- a/net/core/xdp.c +++ b/net/core/xdp.c @@ -646,8 +646,7 @@ struct sk_buff *xdp_build_skb_from_buff(const struct xdp_buff *xdp) if (unlikely(!skb)) return NULL; - skb_reserve(skb, xdp->data - xdp->data_hard_start); - __skb_put(skb, xdp->data_end - xdp->data); + xdp_skb_reserve_put(xdp, skb); metalen = xdp->data - xdp->data_meta; if (metalen > 0) -- 2.43.0