aboutgitcodebugslistschat
path: root/tcp_splice.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-02-14 10:48:22 +1100
committerStefano Brivio <sbrivio@redhat.com>2023-02-14 17:25:11 +0100
commitdc467d526fa2f2f4589b175c42f77b5977ad5975 (patch)
treec35013ef7913ab584385799e9ca9a15bbf235ad4 /tcp_splice.c
parent912d37cd5b8c507d17f38758d50ff3ba0401a99c (diff)
downloadpasst-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar.gz
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar.bz2
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar.lz
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar.xz
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.tar.zst
passt-dc467d526fa2f2f4589b175c42f77b5977ad5975.zip
tcp: Split pool lookup from creating new sockets in tcp_conn_new_sock()
tcp_conn_new_sock() first looks for a socket in a pre-opened pool, then if that's empty creates a new socket in the init namespace. Both parts of this are duplicated in other places: the pool lookup logic is duplicated in tcp_splice_new(), and the socket opening logic is duplicated in tcp_sock_refill_pool(). Split the function into separate parts so we can remove both these duplications. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp_splice.c')
-rw-r--r--tcp_splice.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/tcp_splice.c b/tcp_splice.c
index 09f0e3e..3bf6368 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -451,18 +451,14 @@ static int tcp_splice_connect_ns(void *arg)
static int tcp_splice_new(const struct ctx *c, struct tcp_splice_conn *conn,
in_port_t port, int outbound)
{
- int *p, i, s = -1;
+ int *p, s = -1;
if (outbound)
p = CONN_V6(conn) ? init_sock_pool6 : init_sock_pool4;
else
p = CONN_V6(conn) ? ns_sock_pool6 : ns_sock_pool4;
- for (i = 0; i < TCP_SOCK_POOL_SIZE; i++, p++) {
- SWAP(s, *p);
- if (s >= 0)
- break;
- }
+ s = tcp_conn_pool_sock(p);
/* No socket available in namespace: create a new one for connect() */
if (s < 0 && !outbound) {