|
|
@@ -3656,6 +3656,10 @@ normal:
|
|
|
skb_shinfo(nskb)->tx_flags |= skb_shinfo(head_skb)->tx_flags &
|
|
|
SKBTX_SHARED_FRAG;
|
|
|
|
|
|
+ if (skb_orphan_frags(frag_skb, GFP_ATOMIC) ||
|
|
|
+ skb_zerocopy_clone(nskb, frag_skb, GFP_ATOMIC))
|
|
|
+ goto err;
|
|
|
+
|
|
|
while (pos < offset + len) {
|
|
|
if (i >= nfrags) {
|
|
|
BUG_ON(skb_headlen(list_skb));
|
|
|
@@ -3667,6 +3671,11 @@ normal:
|
|
|
|
|
|
BUG_ON(!nfrags);
|
|
|
|
|
|
+ if (skb_orphan_frags(frag_skb, GFP_ATOMIC) ||
|
|
|
+ skb_zerocopy_clone(nskb, frag_skb,
|
|
|
+ GFP_ATOMIC))
|
|
|
+ goto err;
|
|
|
+
|
|
|
list_skb = list_skb->next;
|
|
|
}
|
|
|
|
|
|
@@ -3678,11 +3687,6 @@ normal:
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
|
- if (unlikely(skb_orphan_frags(frag_skb, GFP_ATOMIC)))
|
|
|
- goto err;
|
|
|
- if (skb_zerocopy_clone(nskb, frag_skb, GFP_ATOMIC))
|
|
|
- goto err;
|
|
|
-
|
|
|
*nskb_frag = *frag;
|
|
|
__skb_frag_ref(nskb_frag);
|
|
|
size = skb_frag_size(nskb_frag);
|