summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKarsten Graul <kgraul@linux.ibm.com>2018-10-23 07:40:39 -0400
committerDavid S. Miller <davem@davemloft.net>2018-10-23 13:57:06 -0400
commit89ab066d4229acd32e323f1569833302544a4186 (patch)
tree8ac41f577d2c524fe0254a23b91144c624c34af4 /net
parent6b7a02f7089b223317bf264b8fdfdaf74be35b5f (diff)
Revert "net: simplify sock_poll_wait"
This reverts commit dd979b4df817e9976f18fb6f9d134d6bc4a3c317. This broke tcp_poll for SMC fallback: An AF_SMC socket establishes an internal TCP socket for the initial handshake with the remote peer. Whenever the SMC connection can not be established this TCP socket is used as a fallback. All socket operations on the SMC socket are then forwarded to the TCP socket. In case of poll, the file->private_data pointer references the SMC socket because the TCP socket has no file assigned. This causes tcp_poll to wait on the wrong socket. Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/atm/common.c2
-rw-r--r--net/caif/caif_socket.c2
-rw-r--r--net/core/datagram.c2
-rw-r--r--net/dccp/proto.c2
-rw-r--r--net/ipv4/tcp.c2
-rw-r--r--net/iucv/af_iucv.c2
-rw-r--r--net/nfc/llcp_sock.c2
-rw-r--r--net/rxrpc/af_rxrpc.c2
-rw-r--r--net/smc/af_smc.c2
-rw-r--r--net/tipc/socket.c2
-rw-r--r--net/unix/af_unix.c4
11 files changed, 12 insertions, 12 deletions
diff --git a/net/atm/common.c b/net/atm/common.c
index 9f8cb0d2e71e..a38c174fc766 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -653,7 +653,7 @@ __poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
653 struct atm_vcc *vcc; 653 struct atm_vcc *vcc;
654 __poll_t mask; 654 __poll_t mask;
655 655
656 sock_poll_wait(file, wait); 656 sock_poll_wait(file, sock, wait);
657 mask = 0; 657 mask = 0;
658 658
659 vcc = ATM_SD(sock); 659 vcc = ATM_SD(sock);
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
index d18965f3291f..416717c57cd1 100644
--- a/net/caif/caif_socket.c
+++ b/net/caif/caif_socket.c
@@ -941,7 +941,7 @@ static __poll_t caif_poll(struct file *file,
941 __poll_t mask; 941 __poll_t mask;
942 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); 942 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
943 943
944 sock_poll_wait(file, wait); 944 sock_poll_wait(file, sock, wait);
945 mask = 0; 945 mask = 0;
946 946
947 /* exceptional events? */ 947 /* exceptional events? */
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 9aac0d63d53e..6a034eb538a1 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -837,7 +837,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock,
837 struct sock *sk = sock->sk; 837 struct sock *sk = sock->sk;
838 __poll_t mask; 838 __poll_t mask;
839 839
840 sock_poll_wait(file, wait); 840 sock_poll_wait(file, sock, wait);
841 mask = 0; 841 mask = 0;
842 842
843 /* exceptional events? */ 843 /* exceptional events? */
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 875858c8b059..43733accf58e 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -325,7 +325,7 @@ __poll_t dccp_poll(struct file *file, struct socket *sock,
325 __poll_t mask; 325 __poll_t mask;
326 struct sock *sk = sock->sk; 326 struct sock *sk = sock->sk;
327 327
328 sock_poll_wait(file, wait); 328 sock_poll_wait(file, sock, wait);
329 if (sk->sk_state == DCCP_LISTEN) 329 if (sk->sk_state == DCCP_LISTEN)
330 return inet_csk_listen_poll(sk); 330 return inet_csk_listen_poll(sk);
331 331
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index b8ba8fa34eff..1834818ed07b 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -507,7 +507,7 @@ __poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
507 const struct tcp_sock *tp = tcp_sk(sk); 507 const struct tcp_sock *tp = tcp_sk(sk);
508 int state; 508 int state;
509 509
510 sock_poll_wait(file, wait); 510 sock_poll_wait(file, sock, wait);
511 511
512 state = inet_sk_state_load(sk); 512 state = inet_sk_state_load(sk);
513 if (state == TCP_LISTEN) 513 if (state == TCP_LISTEN)
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
index 45115c125569..0bed4cc20603 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -1504,7 +1504,7 @@ __poll_t iucv_sock_poll(struct file *file, struct socket *sock,
1504 struct sock *sk = sock->sk; 1504 struct sock *sk = sock->sk;
1505 __poll_t mask = 0; 1505 __poll_t mask = 0;
1506 1506
1507 sock_poll_wait(file, wait); 1507 sock_poll_wait(file, sock, wait);
1508 1508
1509 if (sk->sk_state == IUCV_LISTEN) 1509 if (sk->sk_state == IUCV_LISTEN)
1510 return iucv_accept_poll(sk); 1510 return iucv_accept_poll(sk);
diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
index dd4adf8b1167..ae296273ce3d 100644
--- a/net/nfc/llcp_sock.c
+++ b/net/nfc/llcp_sock.c
@@ -556,7 +556,7 @@ static __poll_t llcp_sock_poll(struct file *file, struct socket *sock,
556 556
557 pr_debug("%p\n", sk); 557 pr_debug("%p\n", sk);
558 558
559 sock_poll_wait(file, wait); 559 sock_poll_wait(file, sock, wait);
560 560
561 if (sk->sk_state == LLCP_LISTEN) 561 if (sk->sk_state == LLCP_LISTEN)
562 return llcp_accept_poll(sk); 562 return llcp_accept_poll(sk);
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
index 013dbcb052e5..64362d078da8 100644
--- a/net/rxrpc/af_rxrpc.c
+++ b/net/rxrpc/af_rxrpc.c
@@ -756,7 +756,7 @@ static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
756 struct rxrpc_sock *rx = rxrpc_sk(sk); 756 struct rxrpc_sock *rx = rxrpc_sk(sk);
757 __poll_t mask; 757 __poll_t mask;
758 758
759 sock_poll_wait(file, wait); 759 sock_poll_wait(file, sock, wait);
760 mask = 0; 760 mask = 0;
761 761
762 /* the socket is readable if there are any messages waiting on the Rx 762 /* the socket is readable if there are any messages waiting on the Rx
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index 015231789ed2..80e2119f1c70 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -1543,7 +1543,7 @@ static __poll_t smc_poll(struct file *file, struct socket *sock,
1543 mask |= EPOLLERR; 1543 mask |= EPOLLERR;
1544 } else { 1544 } else {
1545 if (sk->sk_state != SMC_CLOSED) 1545 if (sk->sk_state != SMC_CLOSED)
1546 sock_poll_wait(file, wait); 1546 sock_poll_wait(file, sock, wait);
1547 if (sk->sk_err) 1547 if (sk->sk_err)
1548 mask |= EPOLLERR; 1548 mask |= EPOLLERR;
1549 if ((sk->sk_shutdown == SHUTDOWN_MASK) || 1549 if ((sk->sk_shutdown == SHUTDOWN_MASK) ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index de09f514428c..636e6131769d 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -717,7 +717,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock,
717 struct tipc_sock *tsk = tipc_sk(sk); 717 struct tipc_sock *tsk = tipc_sk(sk);
718 __poll_t revents = 0; 718 __poll_t revents = 0;
719 719
720 sock_poll_wait(file, wait); 720 sock_poll_wait(file, sock, wait);
721 721
722 if (sk->sk_shutdown & RCV_SHUTDOWN) 722 if (sk->sk_shutdown & RCV_SHUTDOWN)
723 revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM; 723 revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 98d34fb61744..74d1eed7cbd4 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2642,7 +2642,7 @@ static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wa
2642 struct sock *sk = sock->sk; 2642 struct sock *sk = sock->sk;
2643 __poll_t mask; 2643 __poll_t mask;
2644 2644
2645 sock_poll_wait(file, wait); 2645 sock_poll_wait(file, sock, wait);
2646 mask = 0; 2646 mask = 0;
2647 2647
2648 /* exceptional events? */ 2648 /* exceptional events? */
@@ -2679,7 +2679,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
2679 unsigned int writable; 2679 unsigned int writable;
2680 __poll_t mask; 2680 __poll_t mask;
2681 2681
2682 sock_poll_wait(file, wait); 2682 sock_poll_wait(file, sock, wait);
2683 mask = 0; 2683 mask = 0;
2684 2684
2685 /* exceptional events? */ 2685 /* exceptional events? */