tcp: Record Rx hash and NAPI ID in tcp_child_process
authorAlexander Duyck <alexander.h.duyck@intel.com>
Fri, 24 Mar 2017 17:08:00 +0000 (10:08 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 25 Mar 2017 03:49:30 +0000 (20:49 -0700)
While working on some recent busy poll changes we found that child sockets
were being instantiated without NAPI ID being set.  In our first attempt to
fix it, it was suggested that we should just pull programming the NAPI ID
into the function itself since all callers will need to have it set.

In addition to the NAPI ID change I have dropped the code that was
populating the Rx hash since it was actually being populated in
tcp_get_cookie_sock.

Reported-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_minisocks.c
net/ipv6/tcp_ipv6.c

index 7482b5d118619d450e33cde0b0be46f13f43dca6..20cbd2f07f281717c1cb4e901c4c4e22f7c46bd6 100644 (file)
@@ -1409,8 +1409,6 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
                if (!nsk)
                        goto discard;
                if (nsk != sk) {
-                       sock_rps_save_rxhash(nsk, skb);
-                       sk_mark_napi_id(nsk, skb);
                        if (tcp_child_process(sk, nsk, skb)) {
                                rsk = nsk;
                                goto reset;
index 1e217948be629b1c0f770caf9d5678766c84fac9..8f6373b0cd7729e7afde1b733879058197e9c5ca 100644 (file)
@@ -26,6 +26,7 @@
 #include <net/tcp.h>
 #include <net/inet_common.h>
 #include <net/xfrm.h>
+#include <net/busy_poll.h>
 
 int sysctl_tcp_abort_on_overflow __read_mostly;
 
@@ -799,6 +800,9 @@ int tcp_child_process(struct sock *parent, struct sock *child,
        int ret = 0;
        int state = child->sk_state;
 
+       /* record NAPI ID of child */
+       sk_mark_napi_id(child, skb);
+
        tcp_segs_in(tcp_sk(child), skb);
        if (!sock_owned_by_user(child)) {
                ret = tcp_rcv_state_process(child, skb);
index 031a8c019f7a740cffe9d1703d9d87992268b028..8e42e8f54b705ed8780890c7434feeff1055599a 100644 (file)
@@ -1293,8 +1293,6 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
                        goto discard;
 
                if (nsk != sk) {
-                       sock_rps_save_rxhash(nsk, skb);
-                       sk_mark_napi_id(nsk, skb);
                        if (tcp_child_process(sk, nsk, skb))
                                goto reset;
                        if (opt_skb)