|
@@ -799,7 +799,9 @@ static int __ip_append_data(struct sock *sk,
|
|
int csummode = CHECKSUM_NONE;
|
|
int csummode = CHECKSUM_NONE;
|
|
struct rtable *rt = (struct rtable *)cork->dst;
|
|
struct rtable *rt = (struct rtable *)cork->dst;
|
|
|
|
|
|
- exthdrlen = transhdrlen ? rt->dst.header_len : 0;
|
|
|
|
|
|
+ skb = skb_peek_tail(queue);
|
|
|
|
+
|
|
|
|
+ exthdrlen = !skb ? rt->dst.header_len : 0;
|
|
length += exthdrlen;
|
|
length += exthdrlen;
|
|
transhdrlen += exthdrlen;
|
|
transhdrlen += exthdrlen;
|
|
mtu = cork->fragsize;
|
|
mtu = cork->fragsize;
|
|
@@ -825,8 +827,6 @@ static int __ip_append_data(struct sock *sk,
|
|
!exthdrlen)
|
|
!exthdrlen)
|
|
csummode = CHECKSUM_PARTIAL;
|
|
csummode = CHECKSUM_PARTIAL;
|
|
|
|
|
|
- skb = skb_peek_tail(queue);
|
|
|
|
-
|
|
|
|
cork->length += length;
|
|
cork->length += length;
|
|
if (((length > mtu) || (skb && skb_is_gso(skb))) &&
|
|
if (((length > mtu) || (skb && skb_is_gso(skb))) &&
|
|
(sk->sk_protocol == IPPROTO_UDP) &&
|
|
(sk->sk_protocol == IPPROTO_UDP) &&
|