diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r-- | net/ipv6/ip6_output.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 15c4f6cee3e6..9ac6ca2521c3 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -257,6 +257,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl, | |||
257 | ipv6_addr_copy(&hdr->daddr, first_hop); | 257 | ipv6_addr_copy(&hdr->daddr, first_hop); |
258 | 258 | ||
259 | skb->priority = sk->sk_priority; | 259 | skb->priority = sk->sk_priority; |
260 | skb->mark = sk->sk_mark; | ||
260 | 261 | ||
261 | mtu = dst_mtu(dst); | 262 | mtu = dst_mtu(dst); |
262 | if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) { | 263 | if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) { |
@@ -636,6 +637,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
636 | 637 | ||
637 | if (skb_shinfo(skb)->frag_list) { | 638 | if (skb_shinfo(skb)->frag_list) { |
638 | int first_len = skb_pagelen(skb); | 639 | int first_len = skb_pagelen(skb); |
640 | int truesizes = 0; | ||
639 | 641 | ||
640 | if (first_len - hlen > mtu || | 642 | if (first_len - hlen > mtu || |
641 | ((first_len - hlen) & 7) || | 643 | ((first_len - hlen) & 7) || |
@@ -658,7 +660,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
658 | sock_hold(skb->sk); | 660 | sock_hold(skb->sk); |
659 | frag->sk = skb->sk; | 661 | frag->sk = skb->sk; |
660 | frag->destructor = sock_wfree; | 662 | frag->destructor = sock_wfree; |
661 | skb->truesize -= frag->truesize; | 663 | truesizes += frag->truesize; |
662 | } | 664 | } |
663 | } | 665 | } |
664 | 666 | ||
@@ -689,6 +691,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
689 | 691 | ||
690 | first_len = skb_pagelen(skb); | 692 | first_len = skb_pagelen(skb); |
691 | skb->data_len = first_len - skb_headlen(skb); | 693 | skb->data_len = first_len - skb_headlen(skb); |
694 | skb->truesize -= truesizes; | ||
692 | skb->len = first_len; | 695 | skb->len = first_len; |
693 | ipv6_hdr(skb)->payload_len = htons(first_len - | 696 | ipv6_hdr(skb)->payload_len = htons(first_len - |
694 | sizeof(struct ipv6hdr)); | 697 | sizeof(struct ipv6hdr)); |
@@ -1437,6 +1440,7 @@ int ip6_push_pending_frames(struct sock *sk) | |||
1437 | ipv6_addr_copy(&hdr->daddr, final_dst); | 1440 | ipv6_addr_copy(&hdr->daddr, final_dst); |
1438 | 1441 | ||
1439 | skb->priority = sk->sk_priority; | 1442 | skb->priority = sk->sk_priority; |
1443 | skb->mark = sk->sk_mark; | ||
1440 | 1444 | ||
1441 | skb->dst = dst_clone(&rt->u.dst); | 1445 | skb->dst = dst_clone(&rt->u.dst); |
1442 | IP6_INC_STATS(rt->rt6i_idev, IPSTATS_MIB_OUTREQUESTS); | 1446 | IP6_INC_STATS(rt->rt6i_idev, IPSTATS_MIB_OUTREQUESTS); |