The transports only use the socket to find its network namespace. Pass the namespace instead, so that a later patch can ask whether a CID is taken in a namespace without necessarily having a socket on hand. This will help with avoiding CID collisions when devices move between namespaces.
No functional change. Signed-off-by: Bobby Eshleman <[email protected]> --- drivers/vhost/vsock.c | 4 +--- include/net/af_vsock.h | 2 +- net/vmw_vsock/af_vsock.c | 6 ++++-- net/vmw_vsock/virtio_transport.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index abed1fbcf66c..01f8930ca51f 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -91,10 +91,8 @@ static struct vhost_vsock *vhost_vsock_get(u32 guest_cid, struct net *net) return NULL; } -static bool vhost_transport_has_remote_cid(struct vsock_sock *vsk, u32 cid) +static bool vhost_transport_has_remote_cid(struct net *net, u32 cid) { - struct sock *sk = sk_vsock(vsk); - struct net *net = sock_net(sk); bool found; rcu_read_lock(); diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h index 370fcd3ddabc..1c38a27fadf2 100644 --- a/include/net/af_vsock.h +++ b/include/net/af_vsock.h @@ -183,7 +183,7 @@ struct vsock_transport { * CIDs via the hypervisor (i.e. supports the fallback overlay). VMCI * does not implement this as it only serves CIDs 0 and 2. */ - bool (*has_remote_cid)(struct vsock_sock *vsk, u32 remote_cid); + bool (*has_remote_cid)(struct net *net, u32 remote_cid); /* Read a single skb */ int (*read_skb)(struct vsock_sock *, skb_read_actor_t); diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index f7dbef8cf6e7..8f34bf68f916 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -633,11 +633,13 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk) new_transport = transport_g2h; else if (transport_h2g && (!transport_h2g->has_remote_cid || - transport_h2g->has_remote_cid(vsk, remote_cid))) + transport_h2g->has_remote_cid(sock_net(sk), + remote_cid))) new_transport = transport_h2g; else if (sock_net(sk)->vsock.g2h_fallback && transport_g2h && transport_g2h->has_remote_cid && - transport_g2h->has_remote_cid(vsk, remote_cid)) { + transport_g2h->has_remote_cid(sock_net(sk), + remote_cid)) { vsk->remote_addr.svm_flags |= VMADDR_FLAG_TO_HOST; new_transport = transport_g2h; } else { diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c index 4f9aa9c4c3aa..eced6929405d 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -548,7 +548,7 @@ bool virtio_transport_stream_allow(struct vsock_sock *vsk, u32 cid, u32 port) static bool virtio_transport_seqpacket_allow(struct vsock_sock *vsk, u32 remote_cid); -static bool virtio_transport_has_remote_cid(struct vsock_sock *vsk, u32 cid) +static bool virtio_transport_has_remote_cid(struct net *net, u32 cid) { /* The CID could be implemented by the host. Always assume it is. */ return true; -- 2.53.0-Meta

