]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/ipv4/tcp_ipv4.c
PM / wakeup: Drop wakeup_source_init(), wakeup_source_prepare()
[linux.git] / net / ipv4 / tcp_ipv4.c
index bc86f9735f4577d50d94f42b10edb6ba95bb7a05..d57641cb3477d0c573e6648fccfc77ce52f52660 100644 (file)
@@ -662,8 +662,9 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb)
        int genhash;
        struct sock *sk1 = NULL;
 #endif
-       struct net *net;
+       u64 transmit_time = 0;
        struct sock *ctl_sk;
+       struct net *net;
 
        /* Never send a reset in response to a reset. */
        if (th->rst)
@@ -766,14 +767,17 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb)
        arg.tos = ip_hdr(skb)->tos;
        arg.uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
        local_bh_disable();
-       ctl_sk = *this_cpu_ptr(net->ipv4.tcp_sk);
-       if (sk)
+       ctl_sk = this_cpu_read(*net->ipv4.tcp_sk);
+       if (sk) {
                ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
                                   inet_twsk(sk)->tw_mark : sk->sk_mark;
+               transmit_time = tcp_transmit_time(sk);
+       }
        ip_send_unicast_reply(ctl_sk,
                              skb, &TCP_SKB_CB(skb)->header.h4.opt,
                              ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
-                             &arg, arg.iov[0].iov_len);
+                             &arg, arg.iov[0].iov_len,
+                             transmit_time);
 
        ctl_sk->sk_mark = 0;
        __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
@@ -808,6 +812,7 @@ static void tcp_v4_send_ack(const struct sock *sk,
        struct net *net = sock_net(sk);
        struct ip_reply_arg arg;
        struct sock *ctl_sk;
+       u64 transmit_time;
 
        memset(&rep.th, 0, sizeof(struct tcphdr));
        memset(&arg, 0, sizeof(arg));
@@ -858,14 +863,15 @@ static void tcp_v4_send_ack(const struct sock *sk,
        arg.tos = tos;
        arg.uid = sock_net_uid(net, sk_fullsock(sk) ? sk : NULL);
        local_bh_disable();
-       ctl_sk = *this_cpu_ptr(net->ipv4.tcp_sk);
-       if (sk)
-               ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
-                                  inet_twsk(sk)->tw_mark : sk->sk_mark;
+       ctl_sk = this_cpu_read(*net->ipv4.tcp_sk);
+       ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
+                          inet_twsk(sk)->tw_mark : sk->sk_mark;
+       transmit_time = tcp_transmit_time(sk);
        ip_send_unicast_reply(ctl_sk,
                              skb, &TCP_SKB_CB(skb)->header.h4.opt,
                              ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
-                             &arg, arg.iov[0].iov_len);
+                             &arg, arg.iov[0].iov_len,
+                             transmit_time);
 
        ctl_sk->sk_mark = 0;
        __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
@@ -2628,6 +2634,7 @@ static int __net_init tcp_sk_init(struct net *net)
        net->ipv4.sysctl_tcp_ecn_fallback = 1;
 
        net->ipv4.sysctl_tcp_base_mss = TCP_BASE_MSS;
+       net->ipv4.sysctl_tcp_min_snd_mss = TCP_MIN_SND_MSS;
        net->ipv4.sysctl_tcp_probe_threshold = TCP_PROBE_THRESHOLD;
        net->ipv4.sysctl_tcp_probe_interval = TCP_PROBE_INTERVAL;