|
@@ -1299,6 +1299,9 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|
|
|
|
|
segs = ERR_PTR(-EPROTONOSUPPORT);
|
|
|
|
|
|
+ /* Note : following gso_segment() might change skb->encapsulation */
|
|
|
+ udpfrag = !skb->encapsulation && proto == IPPROTO_UDP;
|
|
|
+
|
|
|
ops = rcu_dereference(inet_offloads[proto]);
|
|
|
if (likely(ops && ops->callbacks.gso_segment))
|
|
|
segs = ops->callbacks.gso_segment(skb, features);
|
|
@@ -1306,7 +1309,6 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|
|
if (IS_ERR_OR_NULL(segs))
|
|
|
goto out;
|
|
|
|
|
|
- udpfrag = !!skb->encapsulation && proto == IPPROTO_UDP;
|
|
|
skb = segs;
|
|
|
do {
|
|
|
iph = (struct iphdr *)(skb_mac_header(skb) + nhoff);
|