tcp: Move rcvq sending to tcp_input.c
authorPavel Emelyanov <xemul@parallels.com>
Thu, 10 May 2012 01:49:41 +0000 (01:49 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 11 May 2012 03:24:35 +0000 (23:24 -0400)
It actually works on the input queue and will use its read mem
routines, thus it's better to have in in the tcp_input.c file.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h
net/ipv4/tcp.c
net/ipv4/tcp_input.c

index 92faa6a7ea972ab29617f4b71e1d06aef1632d1b..aaf5de9448c9cd4166fa74a71fd14b0518bfca67 100644 (file)
@@ -432,8 +432,7 @@ extern int tcp_disconnect(struct sock *sk, int flags);
 
 void tcp_connect_init(struct sock *sk);
 void tcp_finish_connect(struct sock *sk, struct sk_buff *skb);
-int __must_check tcp_queue_rcv(struct sock *sk, struct sk_buff *skb,
-                              int hdrlen, bool *fragstolen);
+int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size);
 
 /* From syncookies.c */
 extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS];
index 565406287f6f9fc84afa3b34eda2657814ad14b1..86e2cf2ff770111a4a96be265735ebcf019109eb 100644 (file)
@@ -978,39 +978,6 @@ static inline int select_size(const struct sock *sk, bool sg)
        return tmp;
 }
 
-static int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size)
-{
-       struct sk_buff *skb;
-       struct tcphdr *th;
-       bool fragstolen;
-
-       skb = alloc_skb(size + sizeof(*th), sk->sk_allocation);
-       if (!skb)
-               goto err;
-
-       th = (struct tcphdr *)skb_put(skb, sizeof(*th));
-       skb_reset_transport_header(skb);
-       memset(th, 0, sizeof(*th));
-
-       if (memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size))
-               goto err_free;
-
-       TCP_SKB_CB(skb)->seq = tcp_sk(sk)->rcv_nxt;
-       TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq + size;
-       TCP_SKB_CB(skb)->ack_seq = tcp_sk(sk)->snd_una - 1;
-
-       if (tcp_queue_rcv(sk, skb, sizeof(*th), &fragstolen)) {
-               WARN_ON_ONCE(fragstolen); /* should not happen */
-               __kfree_skb(skb);
-       }
-       return size;
-
-err_free:
-       kfree_skb(skb);
-err:
-       return -ENOMEM;
-}
-
 int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                size_t size)
 {
index eb58b94301ec142f066976f22a0ea0bbbb7702ab..7c6c99dcc96283f955ea66002def010fbeacfeaa 100644 (file)
@@ -4746,7 +4746,7 @@ end:
                skb_set_owner_r(skb, sk);
 }
 
-int tcp_queue_rcv(struct sock *sk, struct sk_buff *skb, int hdrlen,
+static int __must_check tcp_queue_rcv(struct sock *sk, struct sk_buff *skb, int hdrlen,
                  bool *fragstolen)
 {
        int eaten;
@@ -4763,6 +4763,39 @@ int tcp_queue_rcv(struct sock *sk, struct sk_buff *skb, int hdrlen,
        return eaten;
 }
 
+int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size)
+{
+       struct sk_buff *skb;
+       struct tcphdr *th;
+       bool fragstolen;
+
+       skb = alloc_skb(size + sizeof(*th), sk->sk_allocation);
+       if (!skb)
+               goto err;
+
+       th = (struct tcphdr *)skb_put(skb, sizeof(*th));
+       skb_reset_transport_header(skb);
+       memset(th, 0, sizeof(*th));
+
+       if (memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size))
+               goto err_free;
+
+       TCP_SKB_CB(skb)->seq = tcp_sk(sk)->rcv_nxt;
+       TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq + size;
+       TCP_SKB_CB(skb)->ack_seq = tcp_sk(sk)->snd_una - 1;
+
+       if (tcp_queue_rcv(sk, skb, sizeof(*th), &fragstolen)) {
+               WARN_ON_ONCE(fragstolen); /* should not happen */
+               __kfree_skb(skb);
+       }
+       return size;
+
+err_free:
+       kfree_skb(skb);
+err:
+       return -ENOMEM;
+}
+
 static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
 {
        const struct tcphdr *th = tcp_hdr(skb);