diff options
author | Karsten Graul <kgraul@linux.ibm.com> | 2018-10-23 07:40:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-10-23 13:57:06 -0400 |
commit | 89ab066d4229acd32e323f1569833302544a4186 (patch) | |
tree | 8ac41f577d2c524fe0254a23b91144c624c34af4 /net | |
parent | 6b7a02f7089b223317bf264b8fdfdaf74be35b5f (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.c | 2 | ||||
-rw-r--r-- | net/caif/caif_socket.c | 2 | ||||
-rw-r--r-- | net/core/datagram.c | 2 | ||||
-rw-r--r-- | net/dccp/proto.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 2 | ||||
-rw-r--r-- | net/iucv/af_iucv.c | 2 | ||||
-rw-r--r-- | net/nfc/llcp_sock.c | 2 | ||||
-rw-r--r-- | net/rxrpc/af_rxrpc.c | 2 | ||||
-rw-r--r-- | net/smc/af_smc.c | 2 | ||||
-rw-r--r-- | net/tipc/socket.c | 2 | ||||
-rw-r--r-- | net/unix/af_unix.c | 4 |
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? */ |