From: "Alexis Lothoré" <alexis.lothore@bootlin.com>
To: <bot+bpf-ci@kernel.org>, <alexis.lothore@bootlin.com>,
<ast@kernel.org>, <daniel@iogearbox.net>, <andrii@kernel.org>,
<eddyz87@gmail.com>, <memxor@gmail.com>, <martin.lau@linux.dev>,
<song@kernel.org>, <yonghong.song@linux.dev>, <jolsa@kernel.org>,
<emil@etsalapatis.com>, <shuah@kernel.org>,
<ihor.solodrai@linux.dev>
Cc: <ebpf@linuxfoundation.org>, <bastien.curutchet@bootlin.com>,
<thomas.petazzoni@bootlin.com>, <bpf@vger.kernel.org>,
<linux-kselftest@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<martin.lau@kernel.org>, <clm@meta.com>
Subject: Re: [PATCH bpf v3 1/2] selftests/bpf: keep polling connection that is still in progress
Date: Tue, 11 Aug 2026 18:01:58 +0200 [thread overview]
Message-ID: <DKM8OE4Q8051.2HW18WLYW4LBA@bootlin.com> (raw)
In-Reply-To: <9100335a46140b0e6aa30d49dad88a74afd532c1c924580012a4b3450c004edc@mail.kernel.org>
On Tue Aug 11, 2026 at 5:30 PM CEST, bot+bpf-ci wrote:
>> diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
>> index b82f572641b7..25e4d2fa6f6f 100644
>> --- a/tools/testing/selftests/bpf/network_helpers.c
>> +++ b/tools/testing/selftests/bpf/network_helpers.c
>
> [ ... ]
>
>> @@ -305,13 +309,69 @@ int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t add
>> return -1;
>> }
>>
>> - if (connect(fd, (const struct sockaddr *)addr, addrlen)) {
>> + start_ms = get_time_ms();
>> + err = connect(fd, (const struct sockaddr *)addr, addrlen);
>> +
>> + if (!err)
>> + return fd;
>> +
>> + if (errno != EINPROGRESS) {
>> log_err("Failed to connect to server");
>> - save_errno_close(fd);
>> - return -1;
>> + goto close;
>> }
>>
>> - return fd;
>> + duration_ms = get_time_ms() - start_ms;
>> + remaining_ms = duration_ms < opts->timeout_ms ?
>> + opts->timeout_ms - duration_ms :
>> + 0;
>> + if (!remaining_ms) {
>> + errno = ETIMEDOUT;
>> + log_err("Can not poll connection, already in timeout");
>> + goto close;
>> + }
>> +
>> + while (remaining_ms) {
>> + struct pollfd pfd = { .fd = fd, .events = POLLOUT };
>> +
>> + start_ms = get_time_ms();
>> + ret = poll(&pfd, 1, remaining_ms);
>> +
>> + if (ret == 0) {
>> + errno = ETIMEDOUT;
>> + log_err("Connection timeout while polling");
>> + goto close;
>> + } else if (ret < 0 && errno == EINTR) {
>> + duration_ms = get_time_ms() - start_ms;
>> + remaining_ms = duration_ms < remaining_ms ?
>> + remaining_ms - duration_ms :
>> + 0;
>> + if (!remaining_ms) {
>> + errno = ETIMEDOUT;
>> + log_err("Connection timeout after signal");
>> + goto close;
>> + }
>> + } else if (ret < 0) {
>> + log_err("Failed to poll connect status");
>> + goto close;
>> + }
>> +
>> + errlen = sizeof(err);
>> + if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &errlen) < 0) {
>> + log_err("Failed to getsockopt");
>> + goto close;
>> + }
>> +
>> + if (err) {
>> + errno = err;
>> + log_err("Eventually failed to connect to server");
>> + goto close;
>> + }
>> + return fd;
>> + }
>
> Does the EINTR branch need to continue the loop? When poll() returns
> EINTR, the code recomputes remaining_ms but then falls through to
> getsockopt(SO_ERROR). If the connection is still in progress, SO_ERROR
> will be 0 and connect_to_addr() returns the fd even though the socket
> is not yet connected.
Argh, I accidentally got rid of the continue that was in the EINTR
branch while reorganizing a bit all the branches. And it then defeat the
whole purpose of the EINTR branch... Will be updated.
>
> Also, no path inside the while loop reaches the loop condition again -
> every branch either does 'goto close' or 'return fd'. So after the EINTR
> budget recalculation runs, the code never re-enters poll() to use that
> budget.
>
> Would adding 'continue;' at the end of the EINTR branch fix this? That
> way poll() gets called again with the updated remaining_ms, and the
> connection completes properly after a signal interruption.
>
> Test_progs installs a SIGINT handler without SA_RESTART in
> test_progs.c, so EINTR is reachable here.
>
>> +
>> +close:
>> + save_errno_close(fd);
>> + return -1;
>> }
>
> [ ... ]
>
>
> ---
> AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
> See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
>
> CI run summary: https://github.com/kernel-patches/bpf/actions/runs/31503700726
--
Alexis Lothoré, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2026-08-11 16:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 14:26 [PATCH bpf v3 0/2] selftest/bpf: make test_tc_tunnel and test_tc_edt more robust to CI load Alexis Lothoré (eBPF Foundation)
2026-08-11 14:26 ` [PATCH bpf v3 1/2] selftests/bpf: keep polling connection that is still in progress Alexis Lothoré (eBPF Foundation)
2026-08-11 15:05 ` Jiayuan Chen
2026-08-11 16:25 ` Alexis Lothoré
2026-08-12 18:46 ` Ihor Solodrai
2026-08-13 7:29 ` Alexis Lothoré
2026-08-13 16:17 ` Ihor Solodrai
2026-08-11 15:30 ` bot+bpf-ci
2026-08-11 16:01 ` Alexis Lothoré [this message]
2026-08-11 14:26 ` [PATCH bpf v3 2/2] selftests/bpf: add connect timeout to test_tc_edt Alexis Lothoré (eBPF Foundation)
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=DKM8OE4Q8051.2HW18WLYW4LBA@bootlin.com \
--to=alexis.lothore@bootlin.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bastien.curutchet@bootlin.com \
--cc=bot+bpf-ci@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=clm@meta.com \
--cc=daniel@iogearbox.net \
--cc=ebpf@linuxfoundation.org \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=yonghong.song@linux.dev \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.