All of lore.kernel.org
 help / color / mirror / Atom feed
* Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
@ 2019-07-31  6:41 Dexuan Cui
  2019-07-31  9:24 ` Greg Kroah-Hartman
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Dexuan Cui @ 2019-07-31  6:41 UTC (permalink / raw)
  To: stable
  Cc: Sunil Muthuswamy, David S. Miller, Sasha Levin,
	Greg Kroah-Hartman, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 1702 bytes --]

Hi,
Sunil Muthuswamy <sunilmut@microsoft.com> made some important fixes for
hv_sock recently. I and Sunil think it would be great to backport the
fixes to the longterm stable kernels.

Since hv_sock was firstly introduced in v4.14, we only care about
v4.14, v4.19 and v5.2.

For linux-5.2.y (currently it's v5.2.4), only one patch is missing.
The mainline commit ID is:
        d5afa82c977e ("vsock: correct removal of socket from the list")
It can be cleanly cherry-picked from the mainline.


For linux-4.19.y (currently it's v4.19.62), 3 patches are missing.
The mainline commit IDs are:
        cb359b604167 ("hvsock: fix epollout hang from race condition")
        a9eeb998c28d ("hv_sock: Add support for delayed close")
        d5afa82c977e ("vsock: correct removal of socket from the list")
They can be cleanly cherry-picked from the mainline, in the listed order here.
Note: it looks the first commit (cb359b604167) has been queued.


For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
The mainline commit IDs are:
        cb359b604167 ("hvsock: fix epollout hang from race condition")
        3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")
        a9eeb998c28d ("hv_sock: Add support for delayed close")
        d5afa82c977e ("vsock: correct removal of socket from the list")
The third patch (a9eeb998c28d) needs small manual adjustments, and please
use the attached backported patch for it; the other 3 patches can be cleanly
cherry-picked from the mainline, in the listed order here.
Note: it looks the first commit (cb359b604167) has been queued.

Please let me know, if any clarification is needed.

Thanks!
-- Dexuan


[-- Attachment #2: for-v4.14.134-0001-VSOCK-use-TCP-state-constants-for-sk_state.patch --]
[-- Type: application/octet-stream, Size: 20111 bytes --]

From 8d708ff7e1ccca8fc02a562341cc7d78655595bd Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 5 Oct 2017 16:46:52 -0400
Subject: [PATCH] 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>

Backported from:
[ Upstream commit 3b4477d2dcf2709d0be89e2a8dced3d0f4a017f2 ]

Adjusted net/vmw_vsock/hyperv_transport.c since the commit
b4562ca7925a ("hv_sock: add locking in the open/close/release code paths")
and the commit
c9d3fe9da094 ("VSOCK: fix outdated sk_state value in hvs_release()")
were backported before 3b4477d2dcf2.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
---
 include/net/af_vsock.h                       |  3 --
 net/vmw_vsock/af_vsock.c                     | 46 ++++++++++++--------
 net/vmw_vsock/hyperv_transport.c             | 12 ++---
 net/vmw_vsock/virtio_transport.c             |  2 +-
 net/vmw_vsock/virtio_transport_common.c      | 22 +++++-----
 net/vmw_vsock/vmci_transport.c               | 34 +++++++--------
 net/vmw_vsock/vmci_transport_notify.c        |  2 +-
 net/vmw_vsock/vmci_transport_notify_qstate.c |  2 +-
 8 files changed, 64 insertions(+), 59 deletions(-)

diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index 5fb3f6361090..d3775b5379e4 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -22,9 +22,6 @@
 
 #include "vsock_addr.h"
 
-/* vsock-specific sock->sk_state constants */
-#define VSOCK_SS_LISTEN 255
-
 #define LAST_RESERVED_PORT 1023
 
 #define vsock_sk(__sk)    ((struct vsock_sock *)__sk)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index f2fd556c1233..969b428ee81f 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -36,7 +36,7 @@
  * not support simultaneous connects (two "client" sockets connecting).
  *
  * - "Server" sockets are referred to as listener sockets throughout this
- * implementation because they are in the VSOCK_SS_LISTEN state.  When a
+ * implementation because they are in the TCP_LISTEN state.  When a
  * connection request is received (the second kind of socket mentioned above),
  * we create a new socket and refer to it as a pending socket.  These pending
  * sockets are placed on the pending connection list of the listener socket.
@@ -82,6 +82,15 @@
  * argument, we must ensure the reference count is increased to ensure the
  * socket isn't freed before the function is run; the deferred function will
  * then drop the reference.
+ *
+ * - sk->sk_state uses the TCP state constants because they are widely used by
+ * other address families and exposed to userspace tools like ss(8):
+ *
+ *   TCP_CLOSE - unconnected
+ *   TCP_SYN_SENT - connecting
+ *   TCP_ESTABLISHED - connected
+ *   TCP_CLOSING - disconnecting
+ *   TCP_LISTEN - listening
  */
 
 #include <linux/types.h>
@@ -485,7 +494,7 @@ static void vsock_pending_work(struct work_struct *work)
 	if (vsock_in_connected_table(vsk))
 		vsock_remove_connected(vsk);
 
-	sk->sk_state = SS_FREE;
+	sk->sk_state = TCP_CLOSE;
 
 out:
 	release_sock(sk);
@@ -626,7 +635,6 @@ struct sock *__vsock_create(struct net *net,
 
 	sk->sk_destruct = vsock_sk_destruct;
 	sk->sk_backlog_rcv = vsock_queue_rcv_skb;
-	sk->sk_state = 0;
 	sock_reset_flag(sk, SOCK_DONE);
 
 	INIT_LIST_HEAD(&vsk->bound_table);
@@ -902,7 +910,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
 		/* Listening sockets that have connections in their accept
 		 * queue can be read.
 		 */
-		if (sk->sk_state == VSOCK_SS_LISTEN
+		if (sk->sk_state == TCP_LISTEN
 		    && !vsock_is_accept_queue_empty(sk))
 			mask |= POLLIN | POLLRDNORM;
 
@@ -931,7 +939,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
 		}
 
 		/* Connected sockets that can produce data can be written. */
-		if (sk->sk_state == SS_CONNECTED) {
+		if (sk->sk_state == TCP_ESTABLISHED) {
 			if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
 				bool space_avail_now = false;
 				int ret = transport->notify_poll_out(
@@ -953,7 +961,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
 		 * POLLOUT|POLLWRNORM when peer is closed and nothing to read,
 		 * but local send is not shutdown.
 		 */
-		if (sk->sk_state == SS_UNCONNECTED) {
+		if (sk->sk_state == TCP_CLOSE) {
 			if (!(sk->sk_shutdown & SEND_SHUTDOWN))
 				mask |= POLLOUT | POLLWRNORM;
 
@@ -1123,9 +1131,9 @@ static void vsock_connect_timeout(struct work_struct *work)
 	sk = sk_vsock(vsk);
 
 	lock_sock(sk);
-	if (sk->sk_state == SS_CONNECTING &&
+	if (sk->sk_state == TCP_SYN_SENT &&
 	    (sk->sk_shutdown != SHUTDOWN_MASK)) {
-		sk->sk_state = SS_UNCONNECTED;
+		sk->sk_state = TCP_CLOSE;
 		sk->sk_err = ETIMEDOUT;
 		sk->sk_error_report(sk);
 		cancel = 1;
@@ -1171,7 +1179,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 		err = -EALREADY;
 		break;
 	default:
-		if ((sk->sk_state == VSOCK_SS_LISTEN) ||
+		if ((sk->sk_state == TCP_LISTEN) ||
 		    vsock_addr_cast(addr, addr_len, &remote_addr) != 0) {
 			err = -EINVAL;
 			goto out;
@@ -1194,7 +1202,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 		if (err)
 			goto out;
 
-		sk->sk_state = SS_CONNECTING;
+		sk->sk_state = TCP_SYN_SENT;
 
 		err = transport->connect(vsk);
 		if (err < 0)
@@ -1214,7 +1222,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 	timeout = vsk->connect_timeout;
 	prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
 
-	while (sk->sk_state != SS_CONNECTED && sk->sk_err == 0) {
+	while (sk->sk_state != TCP_ESTABLISHED && sk->sk_err == 0) {
 		if (flags & O_NONBLOCK) {
 			/* If we're not going to block, we schedule a timeout
 			 * function to generate a timeout on the connection
@@ -1235,13 +1243,13 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 
 		if (signal_pending(current)) {
 			err = sock_intr_errno(timeout);
-			sk->sk_state = SS_UNCONNECTED;
+			sk->sk_state = TCP_CLOSE;
 			sock->state = SS_UNCONNECTED;
 			vsock_transport_cancel_pkt(vsk);
 			goto out_wait;
 		} else if (timeout == 0) {
 			err = -ETIMEDOUT;
-			sk->sk_state = SS_UNCONNECTED;
+			sk->sk_state = TCP_CLOSE;
 			sock->state = SS_UNCONNECTED;
 			vsock_transport_cancel_pkt(vsk);
 			goto out_wait;
@@ -1252,7 +1260,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 
 	if (sk->sk_err) {
 		err = -sk->sk_err;
-		sk->sk_state = SS_UNCONNECTED;
+		sk->sk_state = TCP_CLOSE;
 		sock->state = SS_UNCONNECTED;
 	} else {
 		err = 0;
@@ -1285,7 +1293,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
 		goto out;
 	}
 
-	if (listener->sk_state != VSOCK_SS_LISTEN) {
+	if (listener->sk_state != TCP_LISTEN) {
 		err = -EINVAL;
 		goto out;
 	}
@@ -1375,7 +1383,7 @@ static int vsock_listen(struct socket *sock, int backlog)
 	}
 
 	sk->sk_max_ack_backlog = backlog;
-	sk->sk_state = VSOCK_SS_LISTEN;
+	sk->sk_state = TCP_LISTEN;
 
 	err = 0;
 
@@ -1555,7 +1563,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 
 	/* Callers should not provide a destination with stream sockets. */
 	if (msg->msg_namelen) {
-		err = sk->sk_state == SS_CONNECTED ? -EISCONN : -EOPNOTSUPP;
+		err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
 		goto out;
 	}
 
@@ -1566,7 +1574,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 		goto out;
 	}
 
-	if (sk->sk_state != SS_CONNECTED ||
+	if (sk->sk_state != TCP_ESTABLISHED ||
 	    !vsock_addr_bound(&vsk->local_addr)) {
 		err = -ENOTCONN;
 		goto out;
@@ -1690,7 +1698,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 
 	lock_sock(sk);
 
-	if (sk->sk_state != SS_CONNECTED) {
+	if (sk->sk_state != TCP_ESTABLISHED) {
 		/* Recvmsg is supposed to return 0 if a peer performs an
 		 * orderly shutdown. Differentiate between that case and when a
 		 * 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 abe733483b24..2a4379663e75 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -297,7 +297,7 @@ static void hvs_close_connection(struct vmbus_channel *chan)
 
 	lock_sock(sk);
 
-	sk->sk_state = SS_UNCONNECTED;
+	sk->sk_state = TCP_CLOSE;
 	sock_set_flag(sk, SOCK_DONE);
 	vsk->peer_shutdown |= SEND_SHUTDOWN | RCV_SHUTDOWN;
 
@@ -335,8 +335,8 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 
 	lock_sock(sk);
 
-	if ((conn_from_host && sk->sk_state != VSOCK_SS_LISTEN) ||
-	    (!conn_from_host && sk->sk_state != SS_CONNECTING))
+	if ((conn_from_host && sk->sk_state != TCP_LISTEN) ||
+	    (!conn_from_host && sk->sk_state != TCP_SYN_SENT))
 		goto out;
 
 	if (conn_from_host) {
@@ -348,7 +348,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 		if (!new)
 			goto out;
 
-		new->sk_state = SS_CONNECTING;
+		new->sk_state = TCP_SYN_SENT;
 		vnew = vsock_sk(new);
 		hvs_new = vnew->trans;
 		hvs_new->chan = chan;
@@ -382,7 +382,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 	hvs_set_channel_pending_send_size(chan);
 
 	if (conn_from_host) {
-		new->sk_state = SS_CONNECTED;
+		new->sk_state = TCP_ESTABLISHED;
 		sk->sk_ack_backlog++;
 
 		hvs_addr_init(&vnew->local_addr, if_type);
@@ -395,7 +395,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 
 		vsock_enqueue_accept(sk, new);
 	} else {
-		sk->sk_state = SS_CONNECTED;
+		sk->sk_state = TCP_ESTABLISHED;
 		sk->sk_socket->state = SS_CONNECTED;
 
 		vsock_insert_connected(vsock_sk(sk));
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 5ebeef8ae3fa..96ab344f17bb 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -417,7 +417,7 @@ static void virtio_vsock_event_fill(struct virtio_vsock *vsock)
 static void virtio_vsock_reset_sock(struct sock *sk)
 {
 	lock_sock(sk);
-	sk->sk_state = SS_UNCONNECTED;
+	sk->sk_state = TCP_CLOSE;
 	sk->sk_err = ECONNRESET;
 	sk->sk_error_report(sk);
 	release_sock(sk);
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index 84d3c0aadd73..f3f3d06cb6d8 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -716,7 +716,7 @@ static void virtio_transport_do_close(struct vsock_sock *vsk,
 	sock_set_flag(sk, SOCK_DONE);
 	vsk->peer_shutdown = SHUTDOWN_MASK;
 	if (vsock_stream_has_data(vsk) <= 0)
-		sk->sk_state = SS_DISCONNECTING;
+		sk->sk_state = TCP_CLOSING;
 	sk->sk_state_change(sk);
 
 	if (vsk->close_work_scheduled &&
@@ -756,8 +756,8 @@ static bool virtio_transport_close(struct vsock_sock *vsk)
 {
 	struct sock *sk = &vsk->sk;
 
-	if (!(sk->sk_state == SS_CONNECTED ||
-	      sk->sk_state == SS_DISCONNECTING))
+	if (!(sk->sk_state == TCP_ESTABLISHED ||
+	      sk->sk_state == TCP_CLOSING))
 		return true;
 
 	/* Already received SHUTDOWN from peer, reply with RST */
@@ -816,7 +816,7 @@ virtio_transport_recv_connecting(struct sock *sk,
 
 	switch (le16_to_cpu(pkt->hdr.op)) {
 	case VIRTIO_VSOCK_OP_RESPONSE:
-		sk->sk_state = SS_CONNECTED;
+		sk->sk_state = TCP_ESTABLISHED;
 		sk->sk_socket->state = SS_CONNECTED;
 		vsock_insert_connected(vsk);
 		sk->sk_state_change(sk);
@@ -836,7 +836,7 @@ virtio_transport_recv_connecting(struct sock *sk,
 
 destroy:
 	virtio_transport_reset(vsk, pkt);
-	sk->sk_state = SS_UNCONNECTED;
+	sk->sk_state = TCP_CLOSE;
 	sk->sk_err = skerr;
 	sk->sk_error_report(sk);
 	return err;
@@ -872,7 +872,7 @@ virtio_transport_recv_connected(struct sock *sk,
 			vsk->peer_shutdown |= SEND_SHUTDOWN;
 		if (vsk->peer_shutdown == SHUTDOWN_MASK &&
 		    vsock_stream_has_data(vsk) <= 0)
-			sk->sk_state = SS_DISCONNECTING;
+			sk->sk_state = TCP_CLOSING;
 		if (le32_to_cpu(pkt->hdr.flags))
 			sk->sk_state_change(sk);
 		break;
@@ -943,7 +943,7 @@ virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
 
 	lock_sock_nested(child, SINGLE_DEPTH_NESTING);
 
-	child->sk_state = SS_CONNECTED;
+	child->sk_state = TCP_ESTABLISHED;
 
 	vchild = vsock_sk(child);
 	vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid),
@@ -1031,18 +1031,18 @@ void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt)
 		sk->sk_write_space(sk);
 
 	switch (sk->sk_state) {
-	case VSOCK_SS_LISTEN:
+	case TCP_LISTEN:
 		virtio_transport_recv_listen(sk, pkt);
 		virtio_transport_free_pkt(pkt);
 		break;
-	case SS_CONNECTING:
+	case TCP_SYN_SENT:
 		virtio_transport_recv_connecting(sk, pkt);
 		virtio_transport_free_pkt(pkt);
 		break;
-	case SS_CONNECTED:
+	case TCP_ESTABLISHED:
 		virtio_transport_recv_connected(sk, pkt);
 		break;
-	case SS_DISCONNECTING:
+	case TCP_CLOSING:
 		virtio_transport_recv_disconnecting(sk, pkt);
 		virtio_transport_free_pkt(pkt);
 		break;
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index ad3f47a714f3..ba4cb18c4b9a 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -776,7 +776,7 @@ static int vmci_transport_recv_stream_cb(void *data, struct vmci_datagram *dg)
 		/* The local context ID may be out of date, update it. */
 		vsk->local_addr.svm_cid = dst.svm_cid;
 
-		if (sk->sk_state == SS_CONNECTED)
+		if (sk->sk_state == TCP_ESTABLISHED)
 			vmci_trans(vsk)->notify_ops->handle_notify_pkt(
 					sk, pkt, true, &dst, &src,
 					&bh_process_pkt);
@@ -834,7 +834,9 @@ static void vmci_transport_handle_detach(struct sock *sk)
 		 * left in our consume queue.
 		 */
 		if (vsock_stream_has_data(vsk) <= 0) {
-			if (sk->sk_state == SS_CONNECTING) {
+			sk->sk_state = TCP_CLOSE;
+
+			if (sk->sk_state == TCP_SYN_SENT) {
 				/* The peer may detach from a queue pair while
 				 * we are still in the connecting state, i.e.,
 				 * if the peer VM is killed after attaching to
@@ -843,12 +845,10 @@ static void vmci_transport_handle_detach(struct sock *sk)
 				 * event like a reset.
 				 */
 
-				sk->sk_state = SS_UNCONNECTED;
 				sk->sk_err = ECONNRESET;
 				sk->sk_error_report(sk);
 				return;
 			}
-			sk->sk_state = SS_UNCONNECTED;
 		}
 		sk->sk_state_change(sk);
 	}
@@ -916,17 +916,17 @@ static void vmci_transport_recv_pkt_work(struct work_struct *work)
 	vsock_sk(sk)->local_addr.svm_cid = pkt->dg.dst.context;
 
 	switch (sk->sk_state) {
-	case VSOCK_SS_LISTEN:
+	case TCP_LISTEN:
 		vmci_transport_recv_listen(sk, pkt);
 		break;
-	case SS_CONNECTING:
+	case TCP_SYN_SENT:
 		/* Processing of pending connections for servers goes through
 		 * the listening socket, so see vmci_transport_recv_listen()
 		 * for that path.
 		 */
 		vmci_transport_recv_connecting_client(sk, pkt);
 		break;
-	case SS_CONNECTED:
+	case TCP_ESTABLISHED:
 		vmci_transport_recv_connected(sk, pkt);
 		break;
 	default:
@@ -975,7 +975,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
 		vsock_sk(pending)->local_addr.svm_cid = pkt->dg.dst.context;
 
 		switch (pending->sk_state) {
-		case SS_CONNECTING:
+		case TCP_SYN_SENT:
 			err = vmci_transport_recv_connecting_server(sk,
 								    pending,
 								    pkt);
@@ -1105,7 +1105,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
 	vsock_add_pending(sk, pending);
 	sk->sk_ack_backlog++;
 
-	pending->sk_state = SS_CONNECTING;
+	pending->sk_state = TCP_SYN_SENT;
 	vmci_trans(vpending)->produce_size =
 		vmci_trans(vpending)->consume_size = qp_size;
 	vmci_trans(vpending)->queue_pair_size = qp_size;
@@ -1229,11 +1229,11 @@ vmci_transport_recv_connecting_server(struct sock *listener,
 	 * the socket will be valid until it is removed from the queue.
 	 *
 	 * If we fail sending the attach below, we remove the socket from the
-	 * connected list and move the socket to SS_UNCONNECTED before
+	 * connected list and move the socket to TCP_CLOSE before
 	 * releasing the lock, so a pending slow path processing of an incoming
 	 * packet will not see the socket in the connected state in that case.
 	 */
-	pending->sk_state = SS_CONNECTED;
+	pending->sk_state = TCP_ESTABLISHED;
 
 	vsock_insert_connected(vpending);
 
@@ -1264,7 +1264,7 @@ vmci_transport_recv_connecting_server(struct sock *listener,
 
 destroy:
 	pending->sk_err = skerr;
-	pending->sk_state = SS_UNCONNECTED;
+	pending->sk_state = TCP_CLOSE;
 	/* As long as we drop our reference, all necessary cleanup will handle
 	 * when the cleanup function drops its reference and our destruct
 	 * implementation is called.  Note that since the listen handler will
@@ -1302,7 +1302,7 @@ vmci_transport_recv_connecting_client(struct sock *sk,
 		 * accounting (it can already be found since it's in the bound
 		 * table).
 		 */
-		sk->sk_state = SS_CONNECTED;
+		sk->sk_state = TCP_ESTABLISHED;
 		sk->sk_socket->state = SS_CONNECTED;
 		vsock_insert_connected(vsk);
 		sk->sk_state_change(sk);
@@ -1370,7 +1370,7 @@ vmci_transport_recv_connecting_client(struct sock *sk,
 destroy:
 	vmci_transport_send_reset(sk, pkt);
 
-	sk->sk_state = SS_UNCONNECTED;
+	sk->sk_state = TCP_CLOSE;
 	sk->sk_err = skerr;
 	sk->sk_error_report(sk);
 	return err;
@@ -1558,7 +1558,7 @@ static int vmci_transport_recv_connected(struct sock *sk,
 		sock_set_flag(sk, SOCK_DONE);
 		vsk->peer_shutdown = SHUTDOWN_MASK;
 		if (vsock_stream_has_data(vsk) <= 0)
-			sk->sk_state = SS_DISCONNECTING;
+			sk->sk_state = TCP_CLOSING;
 
 		sk->sk_state_change(sk);
 		break;
@@ -1826,7 +1826,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
 		err = vmci_transport_send_conn_request(
 			sk, vmci_trans(vsk)->queue_pair_size);
 		if (err < 0) {
-			sk->sk_state = SS_UNCONNECTED;
+			sk->sk_state = TCP_CLOSE;
 			return err;
 		}
 	} else {
@@ -1836,7 +1836,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
 				sk, vmci_trans(vsk)->queue_pair_size,
 				supported_proto_versions);
 		if (err < 0) {
-			sk->sk_state = SS_UNCONNECTED;
+			sk->sk_state = TCP_CLOSE;
 			return err;
 		}
 
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,
 		 * queue. Ask for notifications when there is something to
 		 * read.
 		 */
-		if (sk->sk_state == SS_CONNECTED) {
+		if (sk->sk_state == TCP_ESTABLISHED) {
 			if (!send_waiting_read(sk, 1))
 				return -1;
 
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,
 		 * queue. Ask for notifications when there is something to
 		 * read.
 		 */
-		if (sk->sk_state == SS_CONNECTED)
+		if (sk->sk_state == TCP_ESTABLISHED)
 			vsock_block_update_write_window(sk);
 		*data_ready_now = false;
 	}
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-07-31  6:41 Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y Dexuan Cui
@ 2019-07-31  9:24 ` Greg Kroah-Hartman
  2019-07-31  9:26 ` Greg Kroah-Hartman
  2019-07-31  9:30 ` Greg Kroah-Hartman
  2 siblings, 0 replies; 7+ messages in thread
From: Greg Kroah-Hartman @ 2019-07-31  9:24 UTC (permalink / raw)
  To: Dexuan Cui
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> For linux-4.19.y (currently it's v4.19.62), 3 patches are missing.
> The mainline commit IDs are:
>         cb359b604167 ("hvsock: fix epollout hang from race condition")

This commit is already in 4.19.63 and 4.14.135 :)


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-07-31  6:41 Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y Dexuan Cui
  2019-07-31  9:24 ` Greg Kroah-Hartman
@ 2019-07-31  9:26 ` Greg Kroah-Hartman
  2019-07-31  9:30 ` Greg Kroah-Hartman
  2 siblings, 0 replies; 7+ messages in thread
From: Greg Kroah-Hartman @ 2019-07-31  9:26 UTC (permalink / raw)
  To: Dexuan Cui
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
> The mainline commit IDs are:
>         3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")

That commit is too much to backport, sorry.  Other people have
referenced it in 4.14, so if you "need" it, you can do what they did in
the past with the backport.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-07-31  6:41 Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y Dexuan Cui
  2019-07-31  9:24 ` Greg Kroah-Hartman
  2019-07-31  9:26 ` Greg Kroah-Hartman
@ 2019-07-31  9:30 ` Greg Kroah-Hartman
  2019-07-31 20:13   ` Dexuan Cui
  2 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2019-07-31  9:30 UTC (permalink / raw)
  To: Dexuan Cui
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> Hi,
> Sunil Muthuswamy <sunilmut@microsoft.com> made some important fixes for
> hv_sock recently. I and Sunil think it would be great to backport the
> fixes to the longterm stable kernels.
> 
> Since hv_sock was firstly introduced in v4.14, we only care about
> v4.14, v4.19 and v5.2.
> 
> For linux-5.2.y (currently it's v5.2.4), only one patch is missing.
> The mainline commit ID is:
>         d5afa82c977e ("vsock: correct removal of socket from the list")
> It can be cleanly cherry-picked from the mainline.
> 
> 
> For linux-4.19.y (currently it's v4.19.62), 3 patches are missing.
> The mainline commit IDs are:
>         cb359b604167 ("hvsock: fix epollout hang from race condition")
>         a9eeb998c28d ("hv_sock: Add support for delayed close")
>         d5afa82c977e ("vsock: correct removal of socket from the list")
> They can be cleanly cherry-picked from the mainline, in the listed order here.
> Note: it looks the first commit (cb359b604167) has been queued.
> 
> 
> For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
> The mainline commit IDs are:
>         cb359b604167 ("hvsock: fix epollout hang from race condition")
>         3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")
>         a9eeb998c28d ("hv_sock: Add support for delayed close")
>         d5afa82c977e ("vsock: correct removal of socket from the list")
> The third patch (a9eeb998c28d) needs small manual adjustments, and please
> use the attached backported patch for it; the other 3 patches can be cleanly
> cherry-picked from the mainline, in the listed order here.
> Note: it looks the first commit (cb359b604167) has been queued.

I have not taken 3b4477d2dcf2 ("VSOCK: use TCP state constants for
sk_state") for 4.14.y as it doesn't look like you really needed it.  Are
you sure you did?

The other ones are now queued up, please let me know if I have messed
anythign up.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-07-31  9:30 ` Greg Kroah-Hartman
@ 2019-07-31 20:13   ` Dexuan Cui
  2019-08-01  6:21     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 7+ messages in thread
From: Dexuan Cui @ 2019-07-31 20:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

> From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Sent: Wednesday, July 31, 2019 2:31 AM
> On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> > For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
> > The mainline commit IDs are:
> >         cb359b604167 ("hvsock: fix epollout hang from race condition")
> >         3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")
> >         a9eeb998c28d ("hv_sock: Add support for delayed close")
> >         d5afa82c977e ("vsock: correct removal of socket from the list")
> > The third patch (a9eeb998c28d) needs small manual adjustments, and please
> > use the attached backported patch for it; the other 3 patches can be cleanly
> > cherry-picked from the mainline, in the listed order here.
> > Note: it looks the first commit (cb359b604167) has been queued.
> 
> I have not taken 3b4477d2dcf2 ("VSOCK: use TCP state constants for
> sk_state") for 4.14.y as it doesn't look like you really needed it.  Are
> you sure you did?

For linux-4.14.y:
  Without 3b4477d2dcf2, there would be a conflict when we apply a9eeb998c28d.

  And, without 3b4477d2dcf2, I think actually we should not apply:
  c9d3fe9da094 ("VSOCK: fix outdated sk_state value in hvs_release()"), 
  but c9d3fe9da094 was already applied into linux-4.14.y on Feb 25, 2018.

  I just checked 4.14.136-rc1 and found 3b4477d2dcf2 is queued. This is great! :-)

  So the only missing thing is: we need to cherry pick 
    a9eeb998c28d ("hv_sock: Add support for delayed close")
  onto 4.14.136-rc1.
	
> The other ones are now queued up, please let me know if I have messed
> anythign up.
> 
> greg k-h

Thanks a lot, Greg!

Thanks,
-- Dexuan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-07-31 20:13   ` Dexuan Cui
@ 2019-08-01  6:21     ` Greg Kroah-Hartman
  2019-08-01 16:24       ` Dexuan Cui
  0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2019-08-01  6:21 UTC (permalink / raw)
  To: Dexuan Cui
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

On Wed, Jul 31, 2019 at 08:13:24PM +0000, Dexuan Cui wrote:
> > From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Sent: Wednesday, July 31, 2019 2:31 AM
> > On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> > > For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
> > > The mainline commit IDs are:
> > >         cb359b604167 ("hvsock: fix epollout hang from race condition")
> > >         3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")
> > >         a9eeb998c28d ("hv_sock: Add support for delayed close")
> > >         d5afa82c977e ("vsock: correct removal of socket from the list")
> > > The third patch (a9eeb998c28d) needs small manual adjustments, and please
> > > use the attached backported patch for it; the other 3 patches can be cleanly
> > > cherry-picked from the mainline, in the listed order here.
> > > Note: it looks the first commit (cb359b604167) has been queued.
> > 
> > I have not taken 3b4477d2dcf2 ("VSOCK: use TCP state constants for
> > sk_state") for 4.14.y as it doesn't look like you really needed it.  Are
> > you sure you did?
> 
> For linux-4.14.y:
>   Without 3b4477d2dcf2, there would be a conflict when we apply a9eeb998c28d.

Didn't happen, look at the tree for proof of that :)

>   And, without 3b4477d2dcf2, I think actually we should not apply:
>   c9d3fe9da094 ("VSOCK: fix outdated sk_state value in hvs_release()"), 
>   but c9d3fe9da094 was already applied into linux-4.14.y on Feb 25, 2018.
> 
>   I just checked 4.14.136-rc1 and found 3b4477d2dcf2 is queued. This is great! :-)
> 
>   So the only missing thing is: we need to cherry pick 
>     a9eeb998c28d ("hv_sock: Add support for delayed close")
>   onto 4.14.136-rc1.

Now queued up.

Can you test all of these to verify I got it right?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y
  2019-08-01  6:21     ` Greg Kroah-Hartman
@ 2019-08-01 16:24       ` Dexuan Cui
  0 siblings, 0 replies; 7+ messages in thread
From: Dexuan Cui @ 2019-08-01 16:24 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: stable, Sunil Muthuswamy, David S. Miller, Sasha Levin, Stefan Hajnoczi

> From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Sent: Wednesday, July 31, 2019 11:21 PM
> 
> On Wed, Jul 31, 2019 at 08:13:24PM +0000, Dexuan Cui wrote:
> > > From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > Sent: Wednesday, July 31, 2019 2:31 AM
> > > On Wed, Jul 31, 2019 at 06:41:10AM +0000, Dexuan Cui wrote:
> > > > For linux-4.14.y (currently it's v4.14.134), 4 patches are missing.
> > > > The mainline commit IDs are:
> > > >         cb359b604167 ("hvsock: fix epollout hang from race
> condition")
> > > >         3b4477d2dcf2 ("VSOCK: use TCP state constants for sk_state")
> > > >         a9eeb998c28d ("hv_sock: Add support for delayed close")
> > > >         d5afa82c977e ("vsock: correct removal of socket from the list")
> > > > The third patch (a9eeb998c28d) needs small manual adjustments, and
> please
> > > > use the attached backported patch for it; the other 3 patches can be
> cleanly
> > > > cherry-picked from the mainline, in the listed order here.
> > > > Note: it looks the first commit (cb359b604167) has been queued.
> > >
> > > I have not taken 3b4477d2dcf2 ("VSOCK: use TCP state constants for
> > > sk_state") for 4.14.y as it doesn't look like you really needed it.  Are
> > > you sure you did?
> >
> > For linux-4.14.y:
> >   Without 3b4477d2dcf2, there would be a conflict when we apply
> a9eeb998c28d.
> 
> Didn't happen, look at the tree for proof of that :)
> 
> >   And, without 3b4477d2dcf2, I think actually we should not apply:
> >   c9d3fe9da094 ("VSOCK: fix outdated sk_state value in hvs_release()"),
> >   but c9d3fe9da094 was already applied into linux-4.14.y on Feb 25, 2018.
> >
> >   I just checked 4.14.136-rc1 and found 3b4477d2dcf2 is queued. This is
> great! :-)
> >
> >   So the only missing thing is: we need to cherry pick
> >     a9eeb998c28d ("hv_sock: Add support for delayed close")
> >   onto 4.14.136-rc1.
> 
> Now queued up.
> 
> Can you test all of these to verify I got it right?
> greg k-h

I checked today's linux-stable-rc.git and now we have all we need.

Thank you, Greg!

Thanks,
-- Dexuan

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-08-01 16:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-31  6:41 Request vsock and hv_sock patches to be backported for linux-5.2.y, linux-4.19.y and linux-4.14.y Dexuan Cui
2019-07-31  9:24 ` Greg Kroah-Hartman
2019-07-31  9:26 ` Greg Kroah-Hartman
2019-07-31  9:30 ` Greg Kroah-Hartman
2019-07-31 20:13   ` Dexuan Cui
2019-08-01  6:21     ` Greg Kroah-Hartman
2019-08-01 16:24       ` Dexuan Cui

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.