aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2017-10-05 16:46:52 -0400
committerDavid S. Miller <davem@davemloft.net>2017-10-05 21:44:17 -0400
commit3b4477d2dcf2709d0be89e2a8dced3d0f4a017f2 (patch)
treeeb48feadc95fd95ac671a19f0095621781dc8b69
parentbf359b8127719535f88494adb3c2b73c06667dcd (diff)
VSOCK: use TCP state constants for sk_state
There are two state fields: socket->state and sock->sk_state. The socket->state field uses SS_UNCONNECTED, SS_CONNECTED, etc while the sock->sk_state typically uses values that match TCP state constants (TCP_CLOSE, TCP_ESTABLISHED). AF_VSOCK does not follow this convention and instead uses SS_* constants for both fields. The sk_state field will be exposed to userspace through the vsock_diag interface for ss(8), netstat(8), and other programs. This patch switches sk_state to TCP state constants so that the meaning of this field is consistent with other address families. Not just AF_INET and AF_INET6 use the TCP constants, AF_UNIX and others do too. The following mapping was used to convert the code: SS_FREE -> TCP_CLOSE SS_UNCONNECTED -> TCP_CLOSE SS_CONNECTING -> TCP_SYN_SENT SS_CONNECTED -> TCP_ESTABLISHED SS_DISCONNECTING -> TCP_CLOSING VSOCK_SS_LISTEN -> TCP_LISTEN In __vsock_create() the sk_state initialization was dropped because sock_init_data() already initializes sk_state to TCP_CLOSE. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/af_vsock.h3
-rw-r--r--net/vmw_vsock/af_vsock.c46
-rw-r--r--net/vmw_vsock/hyperv_transport.c12
-rw-r--r--net/vmw_vsock/virtio_transport.c2
-rw-r--r--net/vmw_vsock/virtio_transport_common.c22
-rw-r--r--net/vmw_vsock/vmci_transport.c34
-rw-r--r--net/vmw_vsock/vmci_transport_notify.c2
-rw-r--r--net/vmw_vsock/vmci_transport_notify_qstate.c2
8 files changed, 64 insertions, 59 deletions
diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index 3dd217718a2f..9324ac2d9ff2 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -22,9 +22,6 @@
22 22
23#include "vsock_addr.h" 23#include "vsock_addr.h"
24 24
25/* vsock-specific sock->sk_state constants */
26#define VSOCK_SS_LISTEN 255
27
28#define LAST_RESERVED_PORT 1023 25#define LAST_RESERVED_PORT 1023
29 26
30#define VSOCK_HASH_SIZE 251 27#define VSOCK_HASH_SIZE 251
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 9b179a0081b3..98359c19522f 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -36,7 +36,7 @@
36 * not support simultaneous connects (two "client" sockets connecting). 36 * not support simultaneous connects (two "client" sockets connecting).
37 * 37 *
38 * - "Server" sockets are referred to as listener sockets throughout this 38 * - "Server" sockets are referred to as listener sockets throughout this
39 * implementation because they are in the VSOCK_SS_LISTEN state. When a 39 * implementation because they are in the TCP_LISTEN state. When a
40 * connection request is received (the second kind of socket mentioned above), 40 * connection request is received (the second kind of socket mentioned above),
41 * we create a new socket and refer to it as a pending socket. These pending 41 * we create a new socket and refer to it as a pending socket. These pending
42 * sockets are placed on the pending connection list of the listener socket. 42 * sockets are placed on the pending connection list of the listener socket.
@@ -82,6 +82,15 @@
82 * argument, we must ensure the reference count is increased to ensure the 82 * argument, we must ensure the reference count is increased to ensure the
83 * socket isn't freed before the function is run; the deferred function will 83 * socket isn't freed before the function is run; the deferred function will
84 * then drop the reference. 84 * then drop the reference.
85 *
86 * - sk->sk_state uses the TCP state constants because they are widely used by
87 * other address families and exposed to userspace tools like ss(8):
88 *
89 * TCP_CLOSE - unconnected
90 * TCP_SYN_SENT - connecting
91 * TCP_ESTABLISHED - connected
92 * TCP_CLOSING - disconnecting
93 * TCP_LISTEN - listening
85 */ 94 */
86 95
87#include <linux/types.h> 96#include <linux/types.h>
@@ -477,7 +486,7 @@ void vsock_pending_work(struct work_struct *work)
477 if (vsock_in_connected_table(vsk)) 486 if (vsock_in_connected_table(vsk))
478 vsock_remove_connected(vsk); 487 vsock_remove_connected(vsk);
479 488
480 sk->sk_state = SS_FREE; 489 sk->sk_state = TCP_CLOSE;
481 490
482out: 491out:
483 release_sock(sk); 492 release_sock(sk);
@@ -617,7 +626,6 @@ struct sock *__vsock_create(struct net *net,
617 626
618 sk->sk_destruct = vsock_sk_destruct; 627 sk->sk_destruct = vsock_sk_destruct;
619 sk->sk_backlog_rcv = vsock_queue_rcv_skb; 628 sk->sk_backlog_rcv = vsock_queue_rcv_skb;
620 sk->sk_state = 0;
621 sock_reset_flag(sk, SOCK_DONE); 629 sock_reset_flag(sk, SOCK_DONE);
622 630
623 INIT_LIST_HEAD(&vsk->bound_table); 631 INIT_LIST_HEAD(&vsk->bound_table);
@@ -891,7 +899,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
891 /* Listening sockets that have connections in their accept 899 /* Listening sockets that have connections in their accept
892 * queue can be read. 900 * queue can be read.
893 */ 901 */
894 if (sk->sk_state == VSOCK_SS_LISTEN 902 if (sk->sk_state == TCP_LISTEN
895 && !vsock_is_accept_queue_empty(sk)) 903 && !vsock_is_accept_queue_empty(sk))
896 mask |= POLLIN | POLLRDNORM; 904 mask |= POLLIN | POLLRDNORM;
897 905
@@ -920,7 +928,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
920 } 928 }
921 929
922 /* Connected sockets that can produce data can be written. */ 930 /* Connected sockets that can produce data can be written. */
923 if (sk->sk_state == SS_CONNECTED) { 931 if (sk->sk_state == TCP_ESTABLISHED) {
924 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) { 932 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
925 bool space_avail_now = false; 933 bool space_avail_now = false;
926 int ret = transport->notify_poll_out( 934 int ret = transport->notify_poll_out(
@@ -942,7 +950,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
942 * POLLOUT|POLLWRNORM when peer is closed and nothing to read, 950 * POLLOUT|POLLWRNORM when peer is closed and nothing to read,
943 * but local send is not shutdown. 951 * but local send is not shutdown.
944 */ 952 */
945 if (sk->sk_state == SS_UNCONNECTED) { 953 if (sk->sk_state == TCP_CLOSE) {
946 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) 954 if (!(sk->sk_shutdown & SEND_SHUTDOWN))
947 mask |= POLLOUT | POLLWRNORM; 955 mask |= POLLOUT | POLLWRNORM;
948 956
@@ -1112,9 +1120,9 @@ static void vsock_connect_timeout(struct work_struct *work)
1112 sk = sk_vsock(vsk); 1120 sk = sk_vsock(vsk);
1113 1121
1114 lock_sock(sk); 1122 lock_sock(sk);
1115 if (sk->sk_state == SS_CONNECTING && 1123 if (sk->sk_state == TCP_SYN_SENT &&
1116 (sk->sk_shutdown != SHUTDOWN_MASK)) { 1124 (sk->sk_shutdown != SHUTDOWN_MASK)) {
1117 sk->sk_state = SS_UNCONNECTED; 1125 sk->sk_state = TCP_CLOSE;
1118 sk->sk_err = ETIMEDOUT; 1126 sk->sk_err = ETIMEDOUT;
1119 sk->sk_error_report(sk); 1127 sk->sk_error_report(sk);
1120 cancel = 1; 1128 cancel = 1;
@@ -1160,7 +1168,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
1160 err = -EALREADY; 1168 err = -EALREADY;
1161 break; 1169 break;
1162 default: 1170 default:
1163 if ((sk->sk_state == VSOCK_SS_LISTEN) || 1171 if ((sk->sk_state == TCP_LISTEN) ||
1164 vsock_addr_cast(addr, addr_len, &remote_addr) != 0) { 1172 vsock_addr_cast(addr, addr_len, &remote_addr) != 0) {
1165 err = -EINVAL; 1173 err = -EINVAL;
1166 goto out; 1174 goto out;
@@ -1183,7 +1191,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
1183 if (err) 1191 if (err)
1184 goto out; 1192 goto out;
1185 1193
1186 sk->sk_state = SS_CONNECTING; 1194 sk->sk_state = TCP_SYN_SENT;
1187 1195
1188 err = transport->connect(vsk); 1196 err = transport->connect(vsk);
1189 if (err < 0) 1197 if (err < 0)
@@ -1203,7 +1211,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
1203 timeout = vsk->connect_timeout; 1211 timeout = vsk->connect_timeout;
1204 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1212 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1205 1213
1206 while (sk->sk_state != SS_CONNECTED && sk->sk_err == 0) { 1214 while (sk->sk_state != TCP_ESTABLISHED && sk->sk_err == 0) {
1207 if (flags & O_NONBLOCK) { 1215 if (flags & O_NONBLOCK) {
1208 /* If we're not going to block, we schedule a timeout 1216 /* If we're not going to block, we schedule a timeout
1209 * function to generate a timeout on the connection 1217 * function to generate a timeout on the connection
@@ -1226,13 +1234,13 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
1226 1234
1227 if (signal_pending(current)) { 1235 if (signal_pending(current)) {
1228 err = sock_intr_errno(timeout); 1236 err = sock_intr_errno(timeout);
1229 sk->sk_state = SS_UNCONNECTED; 1237 sk->sk_state = TCP_CLOSE;
1230 sock->state = SS_UNCONNECTED; 1238 sock->state = SS_UNCONNECTED;
1231 vsock_transport_cancel_pkt(vsk); 1239 vsock_transport_cancel_pkt(vsk);
1232 goto out_wait; 1240 goto out_wait;
1233 } else if (timeout == 0) { 1241 } else if (timeout == 0) {
1234 err = -ETIMEDOUT; 1242 err = -ETIMEDOUT;
1235 sk->sk_state = SS_UNCONNECTED; 1243 sk->sk_state = TCP_CLOSE;
1236 sock->state = SS_UNCONNECTED; 1244 sock->state = SS_UNCONNECTED;
1237 vsock_transport_cancel_pkt(vsk); 1245 vsock_transport_cancel_pkt(vsk);
1238 goto out_wait; 1246 goto out_wait;
@@ -1243,7 +1251,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
1243 1251
1244 if (sk->sk_err) { 1252 if (sk->sk_err) {
1245 err = -sk->sk_err; 1253 err = -sk->sk_err;
1246 sk->sk_state = SS_UNCONNECTED; 1254 sk->sk_state = TCP_CLOSE;
1247 sock->state = SS_UNCONNECTED; 1255 sock->state = SS_UNCONNECTED;
1248 } else { 1256 } else {
1249 err = 0; 1257 err = 0;
@@ -1276,7 +1284,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
1276 goto out; 1284 goto out;
1277 } 1285 }
1278 1286
1279 if (listener->sk_state != VSOCK_SS_LISTEN) { 1287 if (listener->sk_state != TCP_LISTEN) {
1280 err = -EINVAL; 1288 err = -EINVAL;
1281 goto out; 1289 goto out;
1282 } 1290 }
@@ -1366,7 +1374,7 @@ static int vsock_listen(struct socket *sock, int backlog)
1366 } 1374 }
1367 1375
1368 sk->sk_max_ack_backlog = backlog; 1376 sk->sk_max_ack_backlog = backlog;
1369 sk->sk_state = VSOCK_SS_LISTEN; 1377 sk->sk_state = TCP_LISTEN;
1370 1378
1371 err = 0; 1379 err = 0;
1372 1380
@@ -1546,7 +1554,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1546 1554
1547 /* Callers should not provide a destination with stream sockets. */ 1555 /* Callers should not provide a destination with stream sockets. */
1548 if (msg->msg_namelen) { 1556 if (msg->msg_namelen) {
1549 err = sk->sk_state == SS_CONNECTED ? -EISCONN : -EOPNOTSUPP; 1557 err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
1550 goto out; 1558 goto out;
1551 } 1559 }
1552 1560
@@ -1557,7 +1565,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1557 goto out; 1565 goto out;
1558 } 1566 }
1559 1567
1560 if (sk->sk_state != SS_CONNECTED || 1568 if (sk->sk_state != TCP_ESTABLISHED ||
1561 !vsock_addr_bound(&vsk->local_addr)) { 1569 !vsock_addr_bound(&vsk->local_addr)) {
1562 err = -ENOTCONN; 1570 err = -ENOTCONN;
1563 goto out; 1571 goto out;
@@ -1681,7 +1689,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1681 1689
1682 lock_sock(sk); 1690 lock_sock(sk);
1683 1691
1684 if (sk->sk_state != SS_CONNECTED) { 1692 if (sk->sk_state != TCP_ESTABLISHED) {
1685 /* Recvmsg is supposed to return 0 if a peer performs an 1693 /* Recvmsg is supposed to return 0 if a peer performs an
1686 * orderly shutdown. Differentiate between that case and when a 1694 * orderly shutdown. Differentiate between that case and when a
1687 * peer has not connected or a local shutdown occured with the 1695 * peer has not connected or a local shutdown occured with the
diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index 14ed5a344cdf..bbac023e70d1 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -310,7 +310,7 @@ static void hvs_close_connection(struct vmbus_channel *chan)
310 struct sock *sk = get_per_channel_state(chan); 310 struct sock *sk = get_per_channel_state(chan);
311 struct vsock_sock *vsk = vsock_sk(sk); 311 struct vsock_sock *vsk = vsock_sk(sk);
312 312
313 sk->sk_state = SS_UNCONNECTED; 313 sk->sk_state = TCP_CLOSE;
314 sock_set_flag(sk, SOCK_DONE); 314 sock_set_flag(sk, SOCK_DONE);
315 vsk->peer_shutdown |= SEND_SHUTDOWN | RCV_SHUTDOWN; 315 vsk->peer_shutdown |= SEND_SHUTDOWN | RCV_SHUTDOWN;
316 316
@@ -344,8 +344,8 @@ static void hvs_open_connection(struct vmbus_channel *chan)
344 if (!sk) 344 if (!sk)
345 return; 345 return;
346 346
347 if ((conn_from_host && sk->sk_state != VSOCK_SS_LISTEN) || 347 if ((conn_from_host && sk->sk_state != TCP_LISTEN) ||
348 (!conn_from_host && sk->sk_state != SS_CONNECTING)) 348 (!conn_from_host && sk->sk_state != TCP_SYN_SENT))
349 goto out; 349 goto out;
350 350
351 if (conn_from_host) { 351 if (conn_from_host) {
@@ -357,7 +357,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
357 if (!new) 357 if (!new)
358 goto out; 358 goto out;
359 359
360 new->sk_state = SS_CONNECTING; 360 new->sk_state = TCP_SYN_SENT;
361 vnew = vsock_sk(new); 361 vnew = vsock_sk(new);
362 hvs_new = vnew->trans; 362 hvs_new = vnew->trans;
363 hvs_new->chan = chan; 363 hvs_new->chan = chan;
@@ -384,7 +384,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
384 vmbus_set_chn_rescind_callback(chan, hvs_close_connection); 384 vmbus_set_chn_rescind_callback(chan, hvs_close_connection);
385 385
386 if (conn_from_host) { 386 if (conn_from_host) {
387 new->sk_state = SS_CONNECTED; 387 new->sk_state = TCP_ESTABLISHED;
388 sk->sk_ack_backlog++; 388 sk->sk_ack_backlog++;
389 389
390 hvs_addr_init(&vnew->local_addr, if_type); 390 hvs_addr_init(&vnew->local_addr, if_type);
@@ -399,7 +399,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
399 vsock_enqueue_accept(sk, new); 399 vsock_enqueue_accept(sk, new);
400 release_sock(sk); 400 release_sock(sk);
401 } else { 401 } else {
402 sk->sk_state = SS_CONNECTED; 402 sk->sk_state = TCP_ESTABLISHED;
403 sk->sk_socket->state = SS_CONNECTED; 403 sk->sk_socket->state = SS_CONNECTED;
404 404
405 vsock_insert_connected(vsock_sk(sk)); 405 vsock_insert_connected(vsock_sk(sk));
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 403d86e80162..8e03bd3f3668 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -414,7 +414,7 @@ static void virtio_vsock_event_fill(struct virtio_vsock *vsock)
414static void virtio_vsock_reset_sock(struct sock *sk) 414static void virtio_vsock_reset_sock(struct sock *sk)
415{ 415{
416 lock_sock(sk); 416 lock_sock(sk);
417 sk->sk_state = SS_UNCONNECTED; 417 sk->sk_state = TCP_CLOSE;
418 sk->sk_err = ECONNRESET; 418 sk->sk_err = ECONNRESET;
419 sk->sk_error_report(sk); 419 sk->sk_error_report(sk);
420 release_sock(sk); 420 release_sock(sk);
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index edba7ab97563..3ae3a33da70b 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -708,7 +708,7 @@ static void virtio_transport_do_close(struct vsock_sock *vsk,
708 sock_set_flag(sk, SOCK_DONE); 708 sock_set_flag(sk, SOCK_DONE);
709 vsk->peer_shutdown = SHUTDOWN_MASK; 709 vsk->peer_shutdown = SHUTDOWN_MASK;
710 if (vsock_stream_has_data(vsk) <= 0) 710 if (vsock_stream_has_data(vsk) <= 0)
711 sk->sk_state = SS_DISCONNECTING; 711 sk->sk_state = TCP_CLOSING;
712 sk->sk_state_change(sk); 712 sk->sk_state_change(sk);
713 713
714 if (vsk->close_work_scheduled && 714 if (vsk->close_work_scheduled &&
@@ -748,8 +748,8 @@ static bool virtio_transport_close(struct vsock_sock *vsk)
748{ 748{
749 struct sock *sk = &vsk->sk; 749 struct sock *sk = &vsk->sk;
750 750
751 if (!(sk->sk_state == SS_CONNECTED || 751 if (!(sk->sk_state == TCP_ESTABLISHED ||
752 sk->sk_state == SS_DISCONNECTING)) 752 sk->sk_state == TCP_CLOSING))
753 return true; 753 return true;
754 754
755 /* Already received SHUTDOWN from peer, reply with RST */ 755 /* Already received SHUTDOWN from peer, reply with RST */
@@ -801,7 +801,7 @@ virtio_transport_recv_connecting(struct sock *sk,
801 801
802 switch (le16_to_cpu(pkt->hdr.op)) { 802 switch (le16_to_cpu(pkt->hdr.op)) {
803 case VIRTIO_VSOCK_OP_RESPONSE: 803 case VIRTIO_VSOCK_OP_RESPONSE:
804 sk->sk_state = SS_CONNECTED; 804 sk->sk_state = TCP_ESTABLISHED;
805 sk->sk_socket->state = SS_CONNECTED; 805 sk->sk_socket->state = SS_CONNECTED;
806 vsock_insert_connected(vsk); 806 vsock_insert_connected(vsk);
807 sk->sk_state_change(sk); 807 sk->sk_state_change(sk);
@@ -821,7 +821,7 @@ virtio_transport_recv_connecting(struct sock *sk,
821 821
822destroy: 822destroy:
823 virtio_transport_reset(vsk, pkt); 823 virtio_transport_reset(vsk, pkt);
824 sk->sk_state = SS_UNCONNECTED; 824 sk->sk_state = TCP_CLOSE;
825 sk->sk_err = skerr; 825 sk->sk_err = skerr;
826 sk->sk_error_report(sk); 826 sk->sk_error_report(sk);
827 return err; 827 return err;
@@ -857,7 +857,7 @@ virtio_transport_recv_connected(struct sock *sk,
857 vsk->peer_shutdown |= SEND_SHUTDOWN; 857 vsk->peer_shutdown |= SEND_SHUTDOWN;
858 if (vsk->peer_shutdown == SHUTDOWN_MASK && 858 if (vsk->peer_shutdown == SHUTDOWN_MASK &&
859 vsock_stream_has_data(vsk) <= 0) 859 vsock_stream_has_data(vsk) <= 0)
860 sk->sk_state = SS_DISCONNECTING; 860 sk->sk_state = TCP_CLOSING;
861 if (le32_to_cpu(pkt->hdr.flags)) 861 if (le32_to_cpu(pkt->hdr.flags))
862 sk->sk_state_change(sk); 862 sk->sk_state_change(sk);
863 break; 863 break;
@@ -928,7 +928,7 @@ virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
928 928
929 lock_sock_nested(child, SINGLE_DEPTH_NESTING); 929 lock_sock_nested(child, SINGLE_DEPTH_NESTING);
930 930
931 child->sk_state = SS_CONNECTED; 931 child->sk_state = TCP_ESTABLISHED;
932 932
933 vchild = vsock_sk(child); 933 vchild = vsock_sk(child);
934 vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid), 934 vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid),
@@ -1016,18 +1016,18 @@ void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt)
1016 sk->sk_write_space(sk); 1016 sk->sk_write_space(sk);
1017 1017
1018 switch (sk->sk_state) { 1018 switch (sk->sk_state) {
1019 case VSOCK_SS_LISTEN: 1019 case TCP_LISTEN:
1020 virtio_transport_recv_listen(sk, pkt); 1020 virtio_transport_recv_listen(sk, pkt);
1021 virtio_transport_free_pkt(pkt); 1021 virtio_transport_free_pkt(pkt);
1022 break; 1022 break;
1023 case SS_CONNECTING: 1023 case TCP_SYN_SENT:
1024 virtio_transport_recv_connecting(sk, pkt); 1024 virtio_transport_recv_connecting(sk, pkt);
1025 virtio_transport_free_pkt(pkt); 1025 virtio_transport_free_pkt(pkt);
1026 break; 1026 break;
1027 case SS_CONNECTED: 1027 case TCP_ESTABLISHED:
1028 virtio_transport_recv_connected(sk, pkt); 1028 virtio_transport_recv_connected(sk, pkt);
1029 break; 1029 break;
1030 case SS_DISCONNECTING: 1030 case TCP_CLOSING:
1031 virtio_transport_recv_disconnecting(sk, pkt); 1031 virtio_transport_recv_disconnecting(sk, pkt);
1032 virtio_transport_free_pkt(pkt); 1032 virtio_transport_free_pkt(pkt);
1033 break; 1033 break;
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index 0206155bff53..391775e3575c 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -742,7 +742,7 @@ static int vmci_transport_recv_stream_cb(void *data, struct vmci_datagram *dg)
742 /* The local context ID may be out of date, update it. */ 742 /* The local context ID may be out of date, update it. */
743 vsk->local_addr.svm_cid = dst.svm_cid; 743 vsk->local_addr.svm_cid = dst.svm_cid;
744 744
745 if (sk->sk_state == SS_CONNECTED) 745 if (sk->sk_state == TCP_ESTABLISHED)
746 vmci_trans(vsk)->notify_ops->handle_notify_pkt( 746 vmci_trans(vsk)->notify_ops->handle_notify_pkt(
747 sk, pkt, true, &dst, &src, 747 sk, pkt, true, &dst, &src,
748 &bh_process_pkt); 748 &bh_process_pkt);
@@ -800,7 +800,9 @@ static void vmci_transport_handle_detach(struct sock *sk)
800 * left in our consume queue. 800 * left in our consume queue.
801 */ 801 */
802 if (vsock_stream_has_data(vsk) <= 0) { 802 if (vsock_stream_has_data(vsk) <= 0) {
803 if (sk->sk_state == SS_CONNECTING) { 803 sk->sk_state = TCP_CLOSE;
804
805 if (sk->sk_state == TCP_SYN_SENT) {
804 /* The peer may detach from a queue pair while 806 /* The peer may detach from a queue pair while
805 * we are still in the connecting state, i.e., 807 * we are still in the connecting state, i.e.,
806 * if the peer VM is killed after attaching to 808 * if the peer VM is killed after attaching to
@@ -809,12 +811,10 @@ static void vmci_transport_handle_detach(struct sock *sk)
809 * event like a reset. 811 * event like a reset.
810 */ 812 */
811 813
812 sk->sk_state = SS_UNCONNECTED;
813 sk->sk_err = ECONNRESET; 814 sk->sk_err = ECONNRESET;
814 sk->sk_error_report(sk); 815 sk->sk_error_report(sk);
815 return; 816 return;
816 } 817 }
817 sk->sk_state = SS_UNCONNECTED;
818 } 818 }
819 sk->sk_state_change(sk); 819 sk->sk_state_change(sk);
820 } 820 }
@@ -882,17 +882,17 @@ static void vmci_transport_recv_pkt_work(struct work_struct *work)
882 vsock_sk(sk)->local_addr.svm_cid = pkt->dg.dst.context; 882 vsock_sk(sk)->local_addr.svm_cid = pkt->dg.dst.context;
883 883
884 switch (sk->sk_state) { 884 switch (sk->sk_state) {
885 case VSOCK_SS_LISTEN: 885 case TCP_LISTEN:
886 vmci_transport_recv_listen(sk, pkt); 886 vmci_transport_recv_listen(sk, pkt);
887 break; 887 break;
888 case SS_CONNECTING: 888 case TCP_SYN_SENT:
889 /* Processing of pending connections for servers goes through 889 /* Processing of pending connections for servers goes through
890 * the listening socket, so see vmci_transport_recv_listen() 890 * the listening socket, so see vmci_transport_recv_listen()
891 * for that path. 891 * for that path.
892 */ 892 */
893 vmci_transport_recv_connecting_client(sk, pkt); 893 vmci_transport_recv_connecting_client(sk, pkt);
894 break; 894 break;
895 case SS_CONNECTED: 895 case TCP_ESTABLISHED:
896 vmci_transport_recv_connected(sk, pkt); 896 vmci_transport_recv_connected(sk, pkt);
897 break; 897 break;
898 default: 898 default:
@@ -941,7 +941,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
941 vsock_sk(pending)->local_addr.svm_cid = pkt->dg.dst.context; 941 vsock_sk(pending)->local_addr.svm_cid = pkt->dg.dst.context;
942 942
943 switch (pending->sk_state) { 943 switch (pending->sk_state) {
944 case SS_CONNECTING: 944 case TCP_SYN_SENT:
945 err = vmci_transport_recv_connecting_server(sk, 945 err = vmci_transport_recv_connecting_server(sk,
946 pending, 946 pending,
947 pkt); 947 pkt);
@@ -1071,7 +1071,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
1071 vsock_add_pending(sk, pending); 1071 vsock_add_pending(sk, pending);
1072 sk->sk_ack_backlog++; 1072 sk->sk_ack_backlog++;
1073 1073
1074 pending->sk_state = SS_CONNECTING; 1074 pending->sk_state = TCP_SYN_SENT;
1075 vmci_trans(vpending)->produce_size = 1075 vmci_trans(vpending)->produce_size =
1076 vmci_trans(vpending)->consume_size = qp_size; 1076 vmci_trans(vpending)->consume_size = qp_size;
1077 vmci_trans(vpending)->queue_pair_size = qp_size; 1077 vmci_trans(vpending)->queue_pair_size = qp_size;
@@ -1196,11 +1196,11 @@ vmci_transport_recv_connecting_server(struct sock *listener,
1196 * the socket will be valid until it is removed from the queue. 1196 * the socket will be valid until it is removed from the queue.
1197 * 1197 *
1198 * If we fail sending the attach below, we remove the socket from the 1198 * If we fail sending the attach below, we remove the socket from the
1199 * connected list and move the socket to SS_UNCONNECTED before 1199 * connected list and move the socket to TCP_CLOSE before
1200 * releasing the lock, so a pending slow path processing of an incoming 1200 * releasing the lock, so a pending slow path processing of an incoming
1201 * packet will not see the socket in the connected state in that case. 1201 * packet will not see the socket in the connected state in that case.
1202 */ 1202 */
1203 pending->sk_state = SS_CONNECTED; 1203 pending->sk_state = TCP_ESTABLISHED;
1204 1204
1205 vsock_insert_connected(vpending); 1205 vsock_insert_connected(vpending);
1206 1206
@@ -1231,7 +1231,7 @@ vmci_transport_recv_connecting_server(struct sock *listener,
1231 1231
1232destroy: 1232destroy:
1233 pending->sk_err = skerr; 1233 pending->sk_err = skerr;
1234 pending->sk_state = SS_UNCONNECTED; 1234 pending->sk_state = TCP_CLOSE;
1235 /* As long as we drop our reference, all necessary cleanup will handle 1235 /* As long as we drop our reference, all necessary cleanup will handle
1236 * when the cleanup function drops its reference and our destruct 1236 * when the cleanup function drops its reference and our destruct
1237 * implementation is called. Note that since the listen handler will 1237 * implementation is called. Note that since the listen handler will
@@ -1269,7 +1269,7 @@ vmci_transport_recv_connecting_client(struct sock *sk,
1269 * accounting (it can already be found since it's in the bound 1269 * accounting (it can already be found since it's in the bound
1270 * table). 1270 * table).
1271 */ 1271 */
1272 sk->sk_state = SS_CONNECTED; 1272 sk->sk_state = TCP_ESTABLISHED;
1273 sk->sk_socket->state = SS_CONNECTED; 1273 sk->sk_socket->state = SS_CONNECTED;
1274 vsock_insert_connected(vsk); 1274 vsock_insert_connected(vsk);
1275 sk->sk_state_change(sk); 1275 sk->sk_state_change(sk);
@@ -1337,7 +1337,7 @@ vmci_transport_recv_connecting_client(struct sock *sk,
1337destroy: 1337destroy:
1338 vmci_transport_send_reset(sk, pkt); 1338 vmci_transport_send_reset(sk, pkt);
1339 1339
1340 sk->sk_state = SS_UNCONNECTED; 1340 sk->sk_state = TCP_CLOSE;
1341 sk->sk_err = skerr; 1341 sk->sk_err = skerr;
1342 sk->sk_error_report(sk); 1342 sk->sk_error_report(sk);
1343 return err; 1343 return err;
@@ -1525,7 +1525,7 @@ static int vmci_transport_recv_connected(struct sock *sk,
1525 sock_set_flag(sk, SOCK_DONE); 1525 sock_set_flag(sk, SOCK_DONE);
1526 vsk->peer_shutdown = SHUTDOWN_MASK; 1526 vsk->peer_shutdown = SHUTDOWN_MASK;
1527 if (vsock_stream_has_data(vsk) <= 0) 1527 if (vsock_stream_has_data(vsk) <= 0)
1528 sk->sk_state = SS_DISCONNECTING; 1528 sk->sk_state = TCP_CLOSING;
1529 1529
1530 sk->sk_state_change(sk); 1530 sk->sk_state_change(sk);
1531 break; 1531 break;
@@ -1789,7 +1789,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
1789 err = vmci_transport_send_conn_request( 1789 err = vmci_transport_send_conn_request(
1790 sk, vmci_trans(vsk)->queue_pair_size); 1790 sk, vmci_trans(vsk)->queue_pair_size);
1791 if (err < 0) { 1791 if (err < 0) {
1792 sk->sk_state = SS_UNCONNECTED; 1792 sk->sk_state = TCP_CLOSE;
1793 return err; 1793 return err;
1794 } 1794 }
1795 } else { 1795 } else {
@@ -1799,7 +1799,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
1799 sk, vmci_trans(vsk)->queue_pair_size, 1799 sk, vmci_trans(vsk)->queue_pair_size,
1800 supported_proto_versions); 1800 supported_proto_versions);
1801 if (err < 0) { 1801 if (err < 0) {
1802 sk->sk_state = SS_UNCONNECTED; 1802 sk->sk_state = TCP_CLOSE;
1803 return err; 1803 return err;
1804 } 1804 }
1805 1805
diff --git a/net/vmw_vsock/vmci_transport_notify.c b/net/vmw_vsock/vmci_transport_notify.c
index 1406db4d97d1..41fb427f150a 100644
--- a/net/vmw_vsock/vmci_transport_notify.c
+++ b/net/vmw_vsock/vmci_transport_notify.c
@@ -355,7 +355,7 @@ vmci_transport_notify_pkt_poll_in(struct sock *sk,
355 * queue. Ask for notifications when there is something to 355 * queue. Ask for notifications when there is something to
356 * read. 356 * read.
357 */ 357 */
358 if (sk->sk_state == SS_CONNECTED) { 358 if (sk->sk_state == TCP_ESTABLISHED) {
359 if (!send_waiting_read(sk, 1)) 359 if (!send_waiting_read(sk, 1))
360 return -1; 360 return -1;
361 361
diff --git a/net/vmw_vsock/vmci_transport_notify_qstate.c b/net/vmw_vsock/vmci_transport_notify_qstate.c
index f3a0afc46208..0cc84f2bb05e 100644
--- a/net/vmw_vsock/vmci_transport_notify_qstate.c
+++ b/net/vmw_vsock/vmci_transport_notify_qstate.c
@@ -176,7 +176,7 @@ vmci_transport_notify_pkt_poll_in(struct sock *sk,
176 * queue. Ask for notifications when there is something to 176 * queue. Ask for notifications when there is something to
177 * read. 177 * read.
178 */ 178 */
179 if (sk->sk_state == SS_CONNECTED) 179 if (sk->sk_state == TCP_ESTABLISHED)
180 vsock_block_update_write_window(sk); 180 vsock_block_update_write_window(sk);
181 *data_ready_now = false; 181 *data_ready_now = false;
182 } 182 }