From: Stefano Garzarella <sgarzare@redhat.com>
To: Nguyen Dinh Phi <phind.uet@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>, Simon Horman <horms@kernel.org>,
virtualization@lists.linux.dev, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 2/3] vsock: remove the now-unused rejected flag
Date: Thu, 13 Aug 2026 10:38:29 +0200 [thread overview]
Message-ID: <an15JxACeo30Owo_@sgarzare-redhat> (raw)
In-Reply-To: <20260810170935.2242314-3-phind.uet@gmail.com>
On Tue, Aug 11, 2026 at 01:09:31AM +0800, Nguyen Dinh Phi wrote:
>After previous patch, the branch marking a socket rejected in
>vsock_accept() is unreachable, and nothing ever sets vsk->rejected
>elsewhere.
>
>Therefore, we can remove the `rejected` field from vsock_sock structure.
I'd like to mention here that since commit d021c344051a ("VSOCK:
Introduce VM Sockets") where `rejected` was introduced, we didn't have
any path where sk_err is set on a listener socket, so that path was dead
since the beginning.
The rest LGTM!
Thanks,
Stefano
>Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
>Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com>
>---
> include/net/af_vsock.h | 5 +----
> net/vmw_vsock/af_vsock.c | 46 +++++++++++++---------------------------
> 2 files changed, 16 insertions(+), 35 deletions(-)
>
>diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
>index 30046a3c20f7..3357ee62d10b 100644
>--- a/include/net/af_vsock.h
>+++ b/include/net/af_vsock.h
>@@ -52,13 +52,10 @@ struct vsock_sock {
> * The listening socket is the head for both lists. Sockets created
> * for connection requests are placed in the pending list until they
> * are connected, at which point they are put in the accept queue list
>- * so they can be accepted in accept(). If accept() cannot accept the
>- * connection, it is marked as rejected so the cleanup function knows
>- * to clean up the socket.
>+ * so they can be accepted in accept().
> */
> struct list_head pending_links;
> struct list_head accept_queue;
>- bool rejected;
> struct delayed_work connect_work;
> struct delayed_work pending_work;
> struct delayed_work close_work;
>diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
>index ff507761f472..b59890bbd217 100644
>--- a/net/vmw_vsock/af_vsock.c
>+++ b/net/vmw_vsock/af_vsock.c
>@@ -38,10 +38,9 @@
> * pending socket. When that socket reaches the connected state, it is removed
> * from the listener socket's pending list and enqueued in the listener
> * socket's accept queue. Callers of accept(2) will accept connected sockets
>- * from the listener socket's accept queue. If the socket cannot be accepted
>- * for some reason then it is marked rejected. Once the connection is
>- * accepted, it is owned by the user process and the responsibility for cleanup
>- * falls with that user process.
>+ * from the listener socket's accept queue. Once the connection is accepted,
>+ * it is owned by the user process and the responsibility for cleanup falls
>+ * with that user process.
> *
> * - It is possible that these pending sockets will never reach the connected
> * state; in fact, we may never receive another packet after the connection
>@@ -49,9 +48,7 @@
> * future, after some amount of time passes where a connection should have been
> * established. This function ensures that the socket is off all lists so it
> * cannot be retrieved, then drops all references to the socket so it is cleaned
>- * up (sock_put() -> sk_free() -> our sk_destruct implementation). Note this
>- * function will also cleanup rejected sockets, those that reach the connected
>- * state but leave it before they have been accepted.
>+ * up (sock_put() -> sk_free() -> our sk_destruct implementation).
> *
> * - Lock ordering for pending or accept queue sockets is:
> *
>@@ -774,11 +771,10 @@ static void vsock_pending_work(struct work_struct *work)
>
> if (vsock_is_pending(sk)) {
> vsock_remove_pending(listener, sk);
>- } else if (!vsk->rejected) {
>- /* We are not on the pending list and accept() did not reject
>- * us, so we must have been accepted by our user process. We
>- * just need to drop our references to the sockets and be on
>- * our way.
>+ } else {
>+ /* We are not on the pending list so we must have been accepted
>+ * by our user process. We just need to drop our references to
>+ * the sockets and be on our way.
> */
> cleanup = false;
> goto out;
>@@ -942,7 +938,6 @@ static struct sock *__vsock_create(struct net *net,
> vsk->listener = NULL;
> INIT_LIST_HEAD(&vsk->pending_links);
> INIT_LIST_HEAD(&vsk->accept_queue);
>- vsk->rejected = false;
> vsk->sent_request = false;
> vsk->ignore_connecting_rst = false;
> WRITE_ONCE(vsk->peer_shutdown, 0);
>@@ -1912,26 +1907,15 @@ static int vsock_accept(struct socket *sock, struct socket *newsock,
> lock_sock_nested(connected, SINGLE_DEPTH_NESTING);
> vconnected = vsock_sk(connected);
>
>- /* If the listener socket has received an error, then we should
>- * reject this socket and return. Note that we simply mark the
>- * socket rejected, drop our reference, and let the cleanup
>- * function handle the cleanup; the fact that we found it in
>- * the listener's accept queue guarantees that the cleanup
>- * function hasn't run yet.
>- */
>- if (err) {
>- vconnected->rejected = true;
>- } else {
>- newsock->state = SS_CONNECTED;
>- sock_graft(connected, newsock);
>+ newsock->state = SS_CONNECTED;
>+ sock_graft(connected, newsock);
>
>- set_bit(SOCK_CUSTOM_SOCKOPT,
>- &connected->sk_socket->flags);
>+ set_bit(SOCK_CUSTOM_SOCKOPT,
>+ &connected->sk_socket->flags);
>
>- if (vsock_msgzerocopy_allow(vconnected->transport))
>- set_bit(SOCK_SUPPORT_ZC,
>- &connected->sk_socket->flags);
>- }
>+ if (vsock_msgzerocopy_allow(vconnected->transport))
>+ set_bit(SOCK_SUPPORT_ZC,
>+ &connected->sk_socket->flags);
>
> release_sock(connected);
> sock_put(connected);
>--
>2.53.0
>
next prev parent reply other threads:[~2026-08-13 8:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 17:09 [PATCH v5 0/3] vsock: fix stale sk_err handling after a failed connect Nguyen Dinh Phi
2026-08-10 17:09 ` [PATCH v5 1/3] vsock: don't check the listener's sk_err in vsock_accept() Nguyen Dinh Phi
2026-08-13 8:24 ` Stefano Garzarella
2026-08-10 17:09 ` [PATCH v5 2/3] vsock: remove the now-unused rejected flag Nguyen Dinh Phi
2026-08-13 8:38 ` Stefano Garzarella [this message]
2026-08-10 17:09 ` [PATCH v5 3/3] vsock: use sock_error() to consume sk_err after a failed connect Nguyen Dinh Phi
2026-08-13 8:43 ` Stefano Garzarella
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=an15JxACeo30Owo_@sgarzare-redhat \
--to=sgarzare@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=phind.uet@gmail.com \
--cc=virtualization@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox