|
@@ -2646,7 +2646,8 @@ void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len)
|
|
{
|
|
{
|
|
int pos = skb_headlen(skb);
|
|
int pos = skb_headlen(skb);
|
|
|
|
|
|
- skb_shinfo(skb1)->tx_flags = skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
|
|
|
|
|
|
+ skb_shinfo(skb1)->tx_flags |= skb_shinfo(skb)->tx_flags &
|
|
|
|
+ SKBTX_SHARED_FRAG;
|
|
if (len < pos) /* Split line is inside header. */
|
|
if (len < pos) /* Split line is inside header. */
|
|
skb_split_inside_header(skb, skb1, len, pos);
|
|
skb_split_inside_header(skb, skb1, len, pos);
|
|
else /* Second chunk has no header, nothing to copy. */
|
|
else /* Second chunk has no header, nothing to copy. */
|
|
@@ -3261,8 +3262,8 @@ normal:
|
|
skb_copy_from_linear_data_offset(head_skb, offset,
|
|
skb_copy_from_linear_data_offset(head_skb, offset,
|
|
skb_put(nskb, hsize), hsize);
|
|
skb_put(nskb, hsize), hsize);
|
|
|
|
|
|
- skb_shinfo(nskb)->tx_flags = skb_shinfo(head_skb)->tx_flags &
|
|
|
|
- SKBTX_SHARED_FRAG;
|
|
|
|
|
|
+ skb_shinfo(nskb)->tx_flags |= skb_shinfo(head_skb)->tx_flags &
|
|
|
|
+ SKBTX_SHARED_FRAG;
|
|
|
|
|
|
while (pos < offset + len) {
|
|
while (pos < offset + len) {
|
|
if (i >= nfrags) {
|
|
if (i >= nfrags) {
|
|
@@ -3948,7 +3949,8 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
return;
|
|
return;
|
|
|
|
|
|
if (tsonly) {
|
|
if (tsonly) {
|
|
- skb_shinfo(skb)->tx_flags = skb_shinfo(orig_skb)->tx_flags;
|
|
|
|
|
|
+ skb_shinfo(skb)->tx_flags |= skb_shinfo(orig_skb)->tx_flags &
|
|
|
|
+ SKBTX_ANY_TSTAMP;
|
|
skb_shinfo(skb)->tskey = skb_shinfo(orig_skb)->tskey;
|
|
skb_shinfo(skb)->tskey = skb_shinfo(orig_skb)->tskey;
|
|
}
|
|
}
|
|
|
|
|