From: David Gibson <david@gibson.dropbear.id.au>
To: Stefano Brivio <sbrivio@redhat.com>, passt-dev@passt.top
Cc: David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH 3/6] tcp: Stop on first error when refilling socket pools
Date: Mon, 19 Feb 2024 18:56:48 +1100 [thread overview]
Message-ID: <20240219075651.1360229-4-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20240219075651.1360229-1-david@gibson.dropbear.id.au>
Currently if we get an error opening a new socket while refilling a socket
pool, we carry on to the next slot and try again. This isn't very useful,
since by far the most likely cause of an error is some sort of resource
exhaustion. Trying again will probably just hit the same error, and maybe
even make things worse.
So, instead stop on the first error while refilling the pool, making do
with however many sockets we managed to open before the error.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
tcp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tcp.c b/tcp.c
index 9eec9f3a..d49210bc 100644
--- a/tcp.c
+++ b/tcp.c
@@ -3016,7 +3016,8 @@ void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
if (pool[i] >= 0)
continue;
- pool[i] = tcp_conn_new_sock(c, af);
+ if ((pool[i] = tcp_conn_new_sock(c, af)) < 0)
+ break;
}
}
--
@@ -3016,7 +3016,8 @@ void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
if (pool[i] >= 0)
continue;
- pool[i] = tcp_conn_new_sock(c, af);
+ if ((pool[i] = tcp_conn_new_sock(c, af)) < 0)
+ break;
}
}
--
2.43.2
next prev parent reply other threads:[~2024-02-19 7:57 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-19 7:56 [PATCH 0/6] tcp: Improve error handling around socket pools David Gibson
2024-02-19 7:56 ` [PATCH 1/6] treewide: Use sa_family_t for address family variables David Gibson
2024-02-19 7:56 ` [PATCH 2/6] tcp: Don't stop refilling socket pool if we find a filled entry David Gibson
2024-02-21 21:08 ` Stefano Brivio
2024-02-21 21:42 ` David Gibson
2024-02-19 7:56 ` David Gibson [this message]
2024-02-19 7:56 ` [PATCH 4/6] tcp, tcp_splice: Issue warnings if unable to refill socket pool David Gibson
2024-02-21 21:09 ` Stefano Brivio
2024-02-21 21:44 ` David Gibson
2024-02-22 12:45 ` Stefano Brivio
2024-02-19 7:56 ` [PATCH 5/6] tcp, tcp_splice: Helpers for getting sockets from the pools David Gibson
2024-02-19 7:56 ` [PATCH 6/6] tcp: Don't store errnos in socket pool David Gibson
2024-02-21 21:09 ` Stefano Brivio
2024-02-21 21:45 ` David Gibson
2024-02-27 14:22 ` [PATCH 0/6] tcp: Improve error handling around socket pools Stefano Brivio
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=20240219075651.1360229-4-david@gibson.dropbear.id.au \
--to=david@gibson.dropbear.id.au \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.com \
/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.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
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 IMAP folder(s).