|
@@ -3631,20 +3631,22 @@ gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
|
|
|
}
|
|
|
EXPORT_SYMBOL(napi_skb_finish);
|
|
|
|
|
|
-void skb_gro_reset_offset(struct sk_buff *skb)
|
|
|
+static void skb_gro_reset_offset(struct sk_buff *skb)
|
|
|
{
|
|
|
+ const struct skb_shared_info *pinfo = skb_shinfo(skb);
|
|
|
+ const skb_frag_t *frag0 = &pinfo->frags[0];
|
|
|
+
|
|
|
NAPI_GRO_CB(skb)->data_offset = 0;
|
|
|
NAPI_GRO_CB(skb)->frag0 = NULL;
|
|
|
NAPI_GRO_CB(skb)->frag0_len = 0;
|
|
|
|
|
|
if (skb->mac_header == skb->tail &&
|
|
|
- !PageHighMem(skb_frag_page(&skb_shinfo(skb)->frags[0]))) {
|
|
|
- NAPI_GRO_CB(skb)->frag0 =
|
|
|
- skb_frag_address(&skb_shinfo(skb)->frags[0]);
|
|
|
- NAPI_GRO_CB(skb)->frag0_len = skb_frag_size(&skb_shinfo(skb)->frags[0]);
|
|
|
+ pinfo->nr_frags &&
|
|
|
+ !PageHighMem(skb_frag_page(frag0))) {
|
|
|
+ NAPI_GRO_CB(skb)->frag0 = skb_frag_address(frag0);
|
|
|
+ NAPI_GRO_CB(skb)->frag0_len = skb_frag_size(frag0);
|
|
|
}
|
|
|
}
|
|
|
-EXPORT_SYMBOL(skb_gro_reset_offset);
|
|
|
|
|
|
gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
|
|
{
|