Commit 8ec6feef authored by Luis Henriques's avatar Luis Henriques

Revert "UBUNTU: SAUCE: net: add recursion limit to GRO"

This reverts commit ac0099a9, as it will
be replaced by the upstream version available in stable kernel release
v4.4.32.
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 34651f19
...@@ -460,7 +460,7 @@ static struct sk_buff **geneve_gro_receive(struct sk_buff **head, ...@@ -460,7 +460,7 @@ static struct sk_buff **geneve_gro_receive(struct sk_buff **head,
skb_gro_pull(skb, gh_len); skb_gro_pull(skb, gh_len);
skb_gro_postpull_rcsum(skb, gh, gh_len); skb_gro_postpull_rcsum(skb, gh, gh_len);
pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); pp = ptype->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -755,7 +755,7 @@ static struct sk_buff **vxlan_gro_receive(struct sk_buff **head, ...@@ -755,7 +755,7 @@ static struct sk_buff **vxlan_gro_receive(struct sk_buff **head,
} }
} }
pp = call_gro_receive(eth_gro_receive, head, skb); pp = eth_gro_receive(head, skb);
out: out:
skb_gro_remcsum_cleanup(skb, &grc); skb_gro_remcsum_cleanup(skb, &grc);
......
...@@ -2052,10 +2052,7 @@ struct napi_gro_cb { ...@@ -2052,10 +2052,7 @@ struct napi_gro_cb {
/* Used in foo-over-udp, set in udp[46]_gro_receive */ /* Used in foo-over-udp, set in udp[46]_gro_receive */
u8 is_ipv6:1; u8 is_ipv6:1;
/* Number of gro_receive callbacks this packet already went through */ /* 7 bit hole */
u8 recursion_counter:4;
/* 3 bit hole */
/* used to support CHECKSUM_COMPLETE for tunneling protocols */ /* used to support CHECKSUM_COMPLETE for tunneling protocols */
__wsum csum; __wsum csum;
...@@ -2066,25 +2063,6 @@ struct napi_gro_cb { ...@@ -2066,25 +2063,6 @@ struct napi_gro_cb {
#define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb)
#define GRO_RECURSION_LIMIT 15
static inline int gro_recursion_inc_test(struct sk_buff *skb)
{
return ++NAPI_GRO_CB(skb)->recursion_counter == GRO_RECURSION_LIMIT;
}
typedef struct sk_buff **(*gro_receive_t)(struct sk_buff **, struct sk_buff *);
static inline struct sk_buff **call_gro_receive(gro_receive_t cb,
struct sk_buff **head,
struct sk_buff *skb)
{
if (gro_recursion_inc_test(skb)) {
NAPI_GRO_CB(skb)->flush |= 1;
return NULL;
}
return cb(head, skb);
}
struct packet_type { struct packet_type {
__be16 type; /* This is really htons(ether_type). */ __be16 type; /* This is really htons(ether_type). */
struct net_device *dev; /* NULL is wildcarded here */ struct net_device *dev; /* NULL is wildcarded here */
......
...@@ -659,7 +659,7 @@ static struct sk_buff **vlan_gro_receive(struct sk_buff **head, ...@@ -659,7 +659,7 @@ static struct sk_buff **vlan_gro_receive(struct sk_buff **head,
skb_gro_pull(skb, sizeof(*vhdr)); skb_gro_pull(skb, sizeof(*vhdr));
skb_gro_postpull_rcsum(skb, vhdr, sizeof(*vhdr)); skb_gro_postpull_rcsum(skb, vhdr, sizeof(*vhdr));
pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); pp = ptype->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -4240,7 +4240,6 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff ...@@ -4240,7 +4240,6 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
NAPI_GRO_CB(skb)->flush = 0; NAPI_GRO_CB(skb)->flush = 0;
NAPI_GRO_CB(skb)->free = 0; NAPI_GRO_CB(skb)->free = 0;
NAPI_GRO_CB(skb)->encap_mark = 0; NAPI_GRO_CB(skb)->encap_mark = 0;
NAPI_GRO_CB(skb)->recursion_counter = 0;
NAPI_GRO_CB(skb)->gro_remcsum_start = 0; NAPI_GRO_CB(skb)->gro_remcsum_start = 0;
/* Setup for GRO checksum validation */ /* Setup for GRO checksum validation */
......
...@@ -438,7 +438,7 @@ struct sk_buff **eth_gro_receive(struct sk_buff **head, ...@@ -438,7 +438,7 @@ struct sk_buff **eth_gro_receive(struct sk_buff **head,
skb_gro_pull(skb, sizeof(*eh)); skb_gro_pull(skb, sizeof(*eh));
skb_gro_postpull_rcsum(skb, eh, sizeof(*eh)); skb_gro_postpull_rcsum(skb, eh, sizeof(*eh));
pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); pp = ptype->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -1372,7 +1372,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head, ...@@ -1372,7 +1372,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
skb_gro_pull(skb, sizeof(*iph)); skb_gro_pull(skb, sizeof(*iph));
skb_set_transport_header(skb, skb_gro_offset(skb)); skb_set_transport_header(skb, skb_gro_offset(skb));
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); pp = ops->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -209,7 +209,7 @@ static struct sk_buff **fou_gro_receive(struct sk_buff **head, ...@@ -209,7 +209,7 @@ static struct sk_buff **fou_gro_receive(struct sk_buff **head,
if (!ops || !ops->callbacks.gro_receive) if (!ops || !ops->callbacks.gro_receive)
goto out_unlock; goto out_unlock;
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); pp = ops->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
...@@ -376,7 +376,7 @@ static struct sk_buff **gue_gro_receive(struct sk_buff **head, ...@@ -376,7 +376,7 @@ static struct sk_buff **gue_gro_receive(struct sk_buff **head,
if (WARN_ON_ONCE(!ops || !ops->callbacks.gro_receive)) if (WARN_ON_ONCE(!ops || !ops->callbacks.gro_receive))
goto out_unlock; goto out_unlock;
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); pp = ops->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -219,7 +219,7 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head, ...@@ -219,7 +219,7 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head,
/* Adjusted NAPI_GRO_CB(skb)->csum after skb_gro_pull()*/ /* Adjusted NAPI_GRO_CB(skb)->csum after skb_gro_pull()*/
skb_gro_postpull_rcsum(skb, greh, grehlen); skb_gro_postpull_rcsum(skb, greh, grehlen);
pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); pp = ptype->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -339,14 +339,8 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb, ...@@ -339,14 +339,8 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,
skb_gro_pull(skb, sizeof(struct udphdr)); /* pull encapsulating udp header */ skb_gro_pull(skb, sizeof(struct udphdr)); /* pull encapsulating udp header */
skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr)); skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
NAPI_GRO_CB(skb)->proto = uo_priv->offload->ipproto; NAPI_GRO_CB(skb)->proto = uo_priv->offload->ipproto;
if (gro_recursion_inc_test(skb)) {
flush = 1;
pp = NULL;
} else {
pp = uo_priv->offload->callbacks.gro_receive(head, skb, pp = uo_priv->offload->callbacks.gro_receive(head, skb,
uo_priv->offload); uo_priv->offload);
}
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -247,7 +247,7 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head, ...@@ -247,7 +247,7 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
skb_gro_postpull_rcsum(skb, iph, nlen); skb_gro_postpull_rcsum(skb, iph, nlen);
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); pp = ops->callbacks.gro_receive(head, skb);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment