net: Add netif_get_gro_max_size helper for GRO
[ Upstream commit e8d4d34df715133c319fabcf63fdec684be75ff8 ] Add a small netif_get_gro_max_size() helper which returns the maximum IPv4 or IPv6 GRO size of the netdevice. We later add a netif_get_gso_max_size() equivalent as well for GSO, so that these helpers can be used consistently instead of open-coded checks. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Cc: Eric Dumazet <edumazet@google.com> Cc: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20240923212242.15669-1-daniel@iogearbox.net Signed-off-by: Paolo Abeni <pabeni@redhat.com> Stable-dep-of: e609c959a939 ("net: Fix gso_features_check to check for both dev->gso_{ipv4_,}max_size") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f0a84ad84d
commit
dae9b99bd2
|
@ -5029,6 +5029,15 @@ void netif_set_tso_max_segs(struct net_device *dev, unsigned int segs);
|
|||
void netif_inherit_tso_max(struct net_device *to,
|
||||
const struct net_device *from);
|
||||
|
||||
static inline unsigned int
|
||||
netif_get_gro_max_size(const struct net_device *dev, const struct sk_buff *skb)
|
||||
{
|
||||
/* pairs with WRITE_ONCE() in netif_set_gro(_ipv4)_max_size() */
|
||||
return skb->protocol == htons(ETH_P_IPV6) ?
|
||||
READ_ONCE(dev->gro_max_size) :
|
||||
READ_ONCE(dev->gro_ipv4_max_size);
|
||||
}
|
||||
|
||||
static inline bool netif_is_macsec(const struct net_device *dev)
|
||||
{
|
||||
return dev->priv_flags & IFF_MACSEC;
|
||||
|
|
|
@ -100,7 +100,6 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb)
|
|||
unsigned int headlen = skb_headlen(skb);
|
||||
unsigned int len = skb_gro_len(skb);
|
||||
unsigned int delta_truesize;
|
||||
unsigned int gro_max_size;
|
||||
unsigned int new_truesize;
|
||||
struct sk_buff *lp;
|
||||
int segs;
|
||||
|
@ -114,12 +113,8 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb)
|
|||
if (p->pp_recycle != skb->pp_recycle)
|
||||
return -ETOOMANYREFS;
|
||||
|
||||
/* pairs with WRITE_ONCE() in netif_set_gro(_ipv4)_max_size() */
|
||||
gro_max_size = p->protocol == htons(ETH_P_IPV6) ?
|
||||
READ_ONCE(p->dev->gro_max_size) :
|
||||
READ_ONCE(p->dev->gro_ipv4_max_size);
|
||||
|
||||
if (unlikely(p->len + len >= gro_max_size || NAPI_GRO_CB(skb)->flush))
|
||||
if (unlikely(p->len + len >= netif_get_gro_max_size(p->dev, p) ||
|
||||
NAPI_GRO_CB(skb)->flush))
|
||||
return -E2BIG;
|
||||
|
||||
if (unlikely(p->len + len >= GRO_LEGACY_MAX_SIZE)) {
|
||||
|
|
Loading…
Reference in New Issue