Commit 25393d3f authored by Steffen Klassert's avatar Steffen Klassert

net: Prepare gro for packet consuming gro callbacks

The upcomming IPsec ESP gro callbacks will consume the skb,
so prepare for that.
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 5f114163
...@@ -352,6 +352,7 @@ enum gro_result { ...@@ -352,6 +352,7 @@ enum gro_result {
GRO_HELD, GRO_HELD,
GRO_NORMAL, GRO_NORMAL,
GRO_DROP, GRO_DROP,
GRO_CONSUMED,
}; };
typedef enum gro_result gro_result_t; typedef enum gro_result gro_result_t;
...@@ -2661,10 +2662,18 @@ static inline void skb_gro_remcsum_cleanup(struct sk_buff *skb, ...@@ -2661,10 +2662,18 @@ static inline void skb_gro_remcsum_cleanup(struct sk_buff *skb,
remcsum_unadjust((__sum16 *)ptr, grc->delta); remcsum_unadjust((__sum16 *)ptr, grc->delta);
} }
#ifdef CONFIG_XFRM_OFFLOAD
static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush)
{
if (PTR_ERR(pp) != -EINPROGRESS)
NAPI_GRO_CB(skb)->flush |= flush;
}
#else
static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush) static inline void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush)
{ {
NAPI_GRO_CB(skb)->flush |= flush; NAPI_GRO_CB(skb)->flush |= flush;
} }
#endif
static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type, unsigned short type,
......
...@@ -4505,6 +4505,11 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff ...@@ -4505,6 +4505,11 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
if (&ptype->list == head) if (&ptype->list == head)
goto normal; goto normal;
if (IS_ERR(pp) && PTR_ERR(pp) == -EINPROGRESS) {
ret = GRO_CONSUMED;
goto ok;
}
same_flow = NAPI_GRO_CB(skb)->same_flow; same_flow = NAPI_GRO_CB(skb)->same_flow;
ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED; ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED;
...@@ -4609,6 +4614,7 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) ...@@ -4609,6 +4614,7 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
case GRO_HELD: case GRO_HELD:
case GRO_MERGED: case GRO_MERGED:
case GRO_CONSUMED:
break; break;
} }
...@@ -4680,6 +4686,7 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi, ...@@ -4680,6 +4686,7 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi,
break; break;
case GRO_MERGED: case GRO_MERGED:
case GRO_CONSUMED:
break; break;
} }
......
...@@ -5,6 +5,10 @@ config XFRM ...@@ -5,6 +5,10 @@ config XFRM
bool bool
depends on NET depends on NET
config XFRM_OFFLOAD
bool
depends on XFRM
config XFRM_ALGO config XFRM_ALGO
tristate tristate
select XFRM select XFRM
......
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