* [PATCH 0/4] VSOCK fix and cleanup
@ 2013-06-20 9:20 Asias He
2013-06-20 9:20 ` [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper Asias He
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Asias He @ 2013-06-20 9:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Andy King, Dmitry Torokhov, Reilly Grant,
Asias He
Asias He (4):
VSOCK: Introduce vsock_auto_bind helper
VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb
VSOCK: Remove unnecessary label
VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
net/vmw_vsock/af_vsock.c | 55 ++++++++++++++++++------------------------
net/vmw_vsock/vmci_transport.c | 18 +++++++-------
2 files changed, 33 insertions(+), 40 deletions(-)
--
1.8.1.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
@ 2013-06-20 9:20 ` Asias He
2013-06-20 15:16 ` Andy King
2013-06-20 9:20 ` [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb Asias He
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Asias He @ 2013-06-20 9:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Andy King, Dmitry Torokhov, Reilly Grant,
Asias He
This peace of code is called tree times, let's have a helper for it.
Signed-off-by: Asias He <asias@redhat.com>
---
net/vmw_vsock/af_vsock.c | 49 +++++++++++++++++++++---------------------------
1 file changed, 21 insertions(+), 28 deletions(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 3f77f42..b0b362a 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -165,6 +165,18 @@ static struct list_head vsock_bind_table[VSOCK_HASH_SIZE + 1];
static struct list_head vsock_connected_table[VSOCK_HASH_SIZE];
static DEFINE_SPINLOCK(vsock_table_lock);
+/* Autobind this socket to the local address if necessary. */
+static int vsock_auto_bind(struct vsock_sock *vsk)
+{
+ struct sock *sk = sk_vsock(vsk);
+ struct sockaddr_vm local_addr;
+
+ if (vsock_addr_bound(&vsk->local_addr))
+ return 0;
+ vsock_addr_init(&local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
+ return __vsock_bind(sk, &local_addr);
+}
+
static void vsock_init_tables(void)
{
int i;
@@ -956,15 +968,10 @@ static int vsock_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
lock_sock(sk);
- if (!vsock_addr_bound(&vsk->local_addr)) {
- struct sockaddr_vm local_addr;
-
- vsock_addr_init(&local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
- err = __vsock_bind(sk, &local_addr);
- if (err != 0)
- goto out;
+ err = vsock_auto_bind(vsk);
+ if (err)
+ goto out;
- }
/* If the provided message contains an address, use that. Otherwise
* fall back on the socket's remote handle (if it has been connected).
@@ -1038,15 +1045,9 @@ static int vsock_dgram_connect(struct socket *sock,
lock_sock(sk);
- if (!vsock_addr_bound(&vsk->local_addr)) {
- struct sockaddr_vm local_addr;
-
- vsock_addr_init(&local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
- err = __vsock_bind(sk, &local_addr);
- if (err != 0)
- goto out;
-
- }
+ err = vsock_auto_bind(vsk);
+ if (err)
+ goto out;
if (!transport->dgram_allow(remote_addr->svm_cid,
remote_addr->svm_port)) {
@@ -1163,17 +1164,9 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
memcpy(&vsk->remote_addr, remote_addr,
sizeof(vsk->remote_addr));
- /* Autobind this socket to the local address if necessary. */
- if (!vsock_addr_bound(&vsk->local_addr)) {
- struct sockaddr_vm local_addr;
-
- vsock_addr_init(&local_addr, VMADDR_CID_ANY,
- VMADDR_PORT_ANY);
- err = __vsock_bind(sk, &local_addr);
- if (err != 0)
- goto out;
-
- }
+ err = vsock_auto_bind(vsk);
+ if (err)
+ goto out;
sk->sk_state = SS_CONNECTING;
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
2013-06-20 9:20 ` [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper Asias He
@ 2013-06-20 9:20 ` Asias He
2013-06-20 15:15 ` Andy King
2013-06-20 9:20 ` [PATCH 3/4] VSOCK: Remove unnecessary label Asias He
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Asias He @ 2013-06-20 9:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Andy King, Dmitry Torokhov, Reilly Grant,
Asias He
vmci_transport_recv_dgram_cb always return VMCI_SUCESS even if we fail
to allocate skb, return VMCI_ERROR_NO_MEM instead.
Signed-off-by: Asias He <asias@redhat.com>
---
net/vmw_vsock/vmci_transport.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index daff752..99b511d 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -625,13 +625,14 @@ static int vmci_transport_recv_dgram_cb(void *data, struct vmci_datagram *dg)
/* Attach the packet to the socket's receive queue as an sk_buff. */
skb = alloc_skb(size, GFP_ATOMIC);
- if (skb) {
- /* sk_receive_skb() will do a sock_put(), so hold here. */
- sock_hold(sk);
- skb_put(skb, size);
- memcpy(skb->data, dg, size);
- sk_receive_skb(sk, skb, 0);
- }
+ if (!skb)
+ return VMCI_ERROR_NO_MEM;
+
+ /* sk_receive_skb() will do a sock_put(), so hold here. */
+ sock_hold(sk);
+ skb_put(skb, size);
+ memcpy(skb->data, dg, size);
+ sk_receive_skb(sk, skb, 0);
return VMCI_SUCCESS;
}
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] VSOCK: Remove unnecessary label
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
2013-06-20 9:20 ` [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper Asias He
2013-06-20 9:20 ` [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb Asias He
@ 2013-06-20 9:20 ` Asias He
2013-06-20 15:13 ` Andy King
2013-06-20 9:20 ` [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH Asias He
2013-06-24 6:52 ` [PATCH 0/4] VSOCK fix and cleanup David Miller
4 siblings, 1 reply; 12+ messages in thread
From: Asias He @ 2013-06-20 9:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Andy King, Dmitry Torokhov, Reilly Grant,
Asias He
Signed-off-by: Asias He <asias@redhat.com>
---
net/vmw_vsock/vmci_transport.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index 99b511d..ffc11df 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -940,10 +940,9 @@ static void vmci_transport_recv_pkt_work(struct work_struct *work)
* reset to prevent that.
*/
vmci_transport_send_reset(sk, pkt);
- goto out;
+ break;
}
-out:
release_sock(sk);
kfree(recv_pkt_info);
/* Release reference obtained in the stream callback when we fetched
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
` (2 preceding siblings ...)
2013-06-20 9:20 ` [PATCH 3/4] VSOCK: Remove unnecessary label Asias He
@ 2013-06-20 9:20 ` Asias He
2013-06-20 15:12 ` Andy King
2013-06-24 6:52 ` [PATCH 0/4] VSOCK fix and cleanup David Miller
4 siblings, 1 reply; 12+ messages in thread
From: Asias He @ 2013-06-20 9:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Andy King, Dmitry Torokhov, Reilly Grant,
Asias He
If we mod with VSOCK_HASH_SIZE -1, we get 0, 1, .... 249. Actually, we
have vsock_bind_table[0 ... 250] and vsock_connected_table[0 .. 250].
In this case the last entry will never be used.
We should mod with VSOCK_HASH_SIZE instead.
Signed-off-by: Asias He <asias@redhat.com>
---
net/vmw_vsock/af_vsock.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index b0b362a..593071d 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -144,18 +144,18 @@ EXPORT_SYMBOL_GPL(vm_sockets_get_local_cid);
* VSOCK_HASH_SIZE + 1 so that vsock_bind_table[0] through
* vsock_bind_table[VSOCK_HASH_SIZE - 1] are for bound sockets and
* vsock_bind_table[VSOCK_HASH_SIZE] is for unbound sockets. The hash function
- * mods with VSOCK_HASH_SIZE - 1 to ensure this.
+ * mods with VSOCK_HASH_SIZE to ensure this.
*/
#define VSOCK_HASH_SIZE 251
#define MAX_PORT_RETRIES 24
-#define VSOCK_HASH(addr) ((addr)->svm_port % (VSOCK_HASH_SIZE - 1))
+#define VSOCK_HASH(addr) ((addr)->svm_port % VSOCK_HASH_SIZE)
#define vsock_bound_sockets(addr) (&vsock_bind_table[VSOCK_HASH(addr)])
#define vsock_unbound_sockets (&vsock_bind_table[VSOCK_HASH_SIZE])
/* XXX This can probably be implemented in a better way. */
#define VSOCK_CONN_HASH(src, dst) \
- (((src)->svm_cid ^ (dst)->svm_port) % (VSOCK_HASH_SIZE - 1))
+ (((src)->svm_cid ^ (dst)->svm_port) % VSOCK_HASH_SIZE)
#define vsock_connected_sockets(src, dst) \
(&vsock_connected_table[VSOCK_CONN_HASH(src, dst)])
#define vsock_connected_sockets_vsk(vsk) \
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
2013-06-20 9:20 ` [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH Asias He
@ 2013-06-20 15:12 ` Andy King
2013-06-21 0:22 ` Asias He
0 siblings, 1 reply; 12+ messages in thread
From: Andy King @ 2013-06-20 15:12 UTC (permalink / raw)
To: Asias He; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
> If we mod with VSOCK_HASH_SIZE -1, we get 0, 1, .... 249. Actually, we
> have vsock_bind_table[0 ... 250] and vsock_connected_table[0 .. 250].
> In this case the last entry will never be used.
If I remember correctly, we did this on purpose. There's actually a
comment about it:
> * VSOCK_HASH_SIZE + 1 so that vsock_bind_table[0] through
> * vsock_bind_table[VSOCK_HASH_SIZE - 1] are for bound sockets and
> * vsock_bind_table[VSOCK_HASH_SIZE] is for unbound sockets. The hash
[250] is for unbound sockets. If you hash on that, you'll mistakenly
get an unbound socket when looking for a bound one.
It is confusing, so perhaps a better way is just to move unbound into
its own table.
Thanks!
- Andy
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/4] VSOCK: Remove unnecessary label
2013-06-20 9:20 ` [PATCH 3/4] VSOCK: Remove unnecessary label Asias He
@ 2013-06-20 15:13 ` Andy King
0 siblings, 0 replies; 12+ messages in thread
From: Andy King @ 2013-06-20 15:13 UTC (permalink / raw)
To: Asias He; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
> Signed-off-by: Asias He <asias@redhat.com>
Acked-by: Andy King <acking@vmware.com>
Thanks for fixing this!
- Andy
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb
2013-06-20 9:20 ` [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb Asias He
@ 2013-06-20 15:15 ` Andy King
0 siblings, 0 replies; 12+ messages in thread
From: Andy King @ 2013-06-20 15:15 UTC (permalink / raw)
To: Asias He; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
> vmci_transport_recv_dgram_cb always return VMCI_SUCESS even if we fail
> to allocate skb, return VMCI_ERROR_NO_MEM instead.
>
> Signed-off-by: Asias He <asias@redhat.com>
Acked-by: Andy King <acking@vmware.com>
Thanks!
- Andy
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper
2013-06-20 9:20 ` [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper Asias He
@ 2013-06-20 15:16 ` Andy King
0 siblings, 0 replies; 12+ messages in thread
From: Andy King @ 2013-06-20 15:16 UTC (permalink / raw)
To: Asias He; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
> This peace of code is called tree times, let's have a helper for it.
>
> Signed-off-by: Asias He <asias@redhat.com>
Acked-by: Andy King <acking@vmware.com>
Great, thanks!
- Andy
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
2013-06-20 15:12 ` Andy King
@ 2013-06-21 0:22 ` Asias He
2013-06-21 12:48 ` Andy King
0 siblings, 1 reply; 12+ messages in thread
From: Asias He @ 2013-06-21 0:22 UTC (permalink / raw)
To: Andy King; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
On Thu, Jun 20, 2013 at 08:12:13AM -0700, Andy King wrote:
> > If we mod with VSOCK_HASH_SIZE -1, we get 0, 1, .... 249. Actually, we
> > have vsock_bind_table[0 ... 250] and vsock_connected_table[0 .. 250].
> > In this case the last entry will never be used.
>
> If I remember correctly, we did this on purpose. There's actually a
> comment about it:
>
> > * VSOCK_HASH_SIZE + 1 so that vsock_bind_table[0] through
> > * vsock_bind_table[VSOCK_HASH_SIZE - 1] are for bound sockets and
> > * vsock_bind_table[VSOCK_HASH_SIZE] is for unbound sockets. The hash
>
> [250] is for unbound sockets. If you hash on that, you'll mistakenly
> get an unbound socket when looking for a bound one.
We have
#define VSOCK_HASH_SIZE 251
static struct list_head vsock_bind_table[VSOCK_HASH_SIZE + 1];
#define vsock_bound_sockets(addr) (&vsock_bind_table[VSOCK_HASH(addr)])
#define vsock_unbound_sockets (&vsock_bind_table[VSOCK_HASH_SIZE])
So
vsock_bind_table[251 + 1]
[0-250] is for bound sockets, [251] is for unbound sockets, no?
> It is confusing, so perhaps a better way is just to move unbound into
> its own table.
This isn't that confusing, but it would be clearer to have a own unbound table.
> Thanks!
> - Andy
--
Asias
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
2013-06-21 0:22 ` Asias He
@ 2013-06-21 12:48 ` Andy King
0 siblings, 0 replies; 12+ messages in thread
From: Andy King @ 2013-06-21 12:48 UTC (permalink / raw)
To: Asias He; +Cc: netdev, David S. Miller, Dmitry Torokhov, Reilly Grant
> [0-250] is for bound sockets, [251] is for unbound sockets, no?
Well caught.
Acked-by: Andy King <acking@vmware.com>
Thanks!
- Andy
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/4] VSOCK fix and cleanup
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
` (3 preceding siblings ...)
2013-06-20 9:20 ` [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH Asias He
@ 2013-06-24 6:52 ` David Miller
4 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2013-06-24 6:52 UTC (permalink / raw)
To: asias; +Cc: netdev, acking, dtor, grantr
From: Asias He <asias@redhat.com>
Date: Thu, 20 Jun 2013 17:20:29 +0800
>
> Asias He (4):
> VSOCK: Introduce vsock_auto_bind helper
> VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb
> VSOCK: Remove unnecessary label
> VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH
Series applied to net-next, thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-06-24 6:52 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-20 9:20 [PATCH 0/4] VSOCK fix and cleanup Asias He
2013-06-20 9:20 ` [PATCH 1/4] VSOCK: Introduce vsock_auto_bind helper Asias He
2013-06-20 15:16 ` Andy King
2013-06-20 9:20 ` [PATCH 2/4] VSOCK: Return VMCI_ERROR_NO_MEM when fails to allocate skb Asias He
2013-06-20 15:15 ` Andy King
2013-06-20 9:20 ` [PATCH 3/4] VSOCK: Remove unnecessary label Asias He
2013-06-20 15:13 ` Andy King
2013-06-20 9:20 ` [PATCH 4/4] VSOCK: Fix VSOCK_HASH and VSOCK_CONN_HASH Asias He
2013-06-20 15:12 ` Andy King
2013-06-21 0:22 ` Asias He
2013-06-21 12:48 ` Andy King
2013-06-24 6:52 ` [PATCH 0/4] VSOCK fix and cleanup David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).