mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 01:11:51 -04:00
vsock: remove the now-unused rejected flag
After previous patch, the branch marking a socket rejected in
vsock_accept() is unreachable, and nothing ever sets vsk->rejected
elsewhere.
In fact, since commit d021c34405 ("VSOCK: Introduce VM Sockets"),
where `rejected` was introduced, there has never been a path that sets
sk_err on a listening socket, so that branch has been dead code since
the beginning.
Therefore, we can remove the `rejected` field from vsock_sock structure.
Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Link: https://patch.msgid.link/20260813173024.2362935-3-phind.uet@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
b8c899cf5e
commit
81fc0f3696
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
@@ -1914,27 +1909,16 @@ 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,
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user