From: Jakub Sitnicki <jakub@cloudflare.com>
To: Michal Luczaj <mhal@rbox.co>
Cc: Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Mykola Lysenko <mykolal@fb.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>,
Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,
Shuah Khan <shuah@kernel.org>,
bpf@vger.kernel.org, netdev@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH bpf 1/6] selftest/bpf: Support more socket types in create_pair()
Date: Fri, 26 Jul 2024 19:23:41 +0200 [thread overview]
Message-ID: <87cyn0kqxu.fsf@cloudflare.com> (raw)
In-Reply-To: <20240724-sockmap-selftest-fixes-v1-1-46165d224712@rbox.co> (Michal Luczaj's message of "Wed, 24 Jul 2024 13:32:37 +0200")
On Wed, Jul 24, 2024 at 01:32 PM +02, Michal Luczaj wrote:
> Extend the function to allow creating socket pairs of SOCK_STREAM,
> SOCK_DGRAM and SOCK_SEQPACKET.
>
> Adapt direct callers and leave further cleanups for the following patch.
>
> Suggested-by: Jakub Sitnicki <jakub@cloudflare.com>
> Signed-off-by: Michal Luczaj <mhal@rbox.co>
> ---
> .../selftests/bpf/prog_tests/sockmap_basic.c | 19 +--
> .../selftests/bpf/prog_tests/sockmap_helpers.h | 138 ++++++++++++++-------
> 2 files changed, 96 insertions(+), 61 deletions(-)
>
[...]
> diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h b/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
> index e880f97bc44d..77b73333f091 100644
> --- a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
> +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
[...]
> +static inline int create_pair(int family, int sotype, int *p0, int *p1)
> +{
> + struct sockaddr_storage addr;
> + socklen_t len = sizeof(addr);
> + int s, c, p, err;
> +
> + s = socket_loopback(family, sotype);
> + if (s < 0)
> + return s;
> +
> + err = xgetsockname(s, sockaddr(&addr), &len);
> + if (err)
> + goto close_s;
> +
> + c = xsocket(family, sotype, 0);
> + if (c < 0) {
> + err = c;
> + goto close_s;
> + }
> +
> + err = connect(c, sockaddr(&addr), len);
> + if (err) {
> + if (errno != EINPROGRESS) {
> + FAIL_ERRNO("connect");
> + goto close_c;
> + }
> +
> + err = poll_connect(c, IO_TIMEOUT_SEC);
> + if (err) {
> + FAIL_ERRNO("poll_connect");
> + goto close_c;
> + }
> + }
> +
> + switch (sotype & SOCK_TYPE_MASK) {
> + case SOCK_DGRAM:
> + err = xgetsockname(c, sockaddr(&addr), &len);
> + if (err)
> + goto close_c;
> +
> + err = xconnect(s, sockaddr(&addr), len);
> + if (!err) {
> + *p0 = s;
> + *p1 = c;
> + return err;
> + }
> + break;
> + case SOCK_STREAM:
> + case SOCK_SEQPACKET:
> + p = xaccept_nonblock(s, NULL, NULL);
> + if (p >= 0) {
> + *p0 = p;
> + *p1 = c;
> + goto close_s;
> + }
> +
> + err = p;
> + break;
> + default:
> + FAIL("Unsupported socket type %#x", sotype);
> + err = -EOPNOTSUPP;
> + }
> +
> +close_c:
> + close(c);
> +close_s:
> + close(s);
> + return err;
> +}
I was going to suggest that a single return path for success is better
than two (diff below), but I see that this is what you ended up with
after patch 6.
So I think we can leave it as is.
---
diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h b/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
index 77b73333f091..ed266c6c0117 100644
--- a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
+++ b/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h
@@ -408,28 +408,31 @@ static inline int create_pair(int family, int sotype, int *p0, int *p1)
goto close_c;
err = xconnect(s, sockaddr(&addr), len);
- if (!err) {
- *p0 = s;
- *p1 = c;
- return err;
- }
+ if (err)
+ goto close_c;
+
+ p = s;
break;
case SOCK_STREAM:
case SOCK_SEQPACKET:
p = xaccept_nonblock(s, NULL, NULL);
- if (p >= 0) {
- *p0 = p;
- *p1 = c;
- goto close_s;
+ if (p < 0) {
+ err = p;
+ goto close_c;
}
- err = p;
+ xclose(s);
break;
default:
FAIL("Unsupported socket type %#x", sotype);
err = -EOPNOTSUPP;
+ goto close_c;
}
+ *p0 = p;
+ *p1 = c;
+ return 0;
+
close_c:
close(c);
close_s:
next prev parent reply other threads:[~2024-07-26 17:23 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-24 11:32 [PATCH bpf 0/6] selftest/bpf: Various sockmap-related fixes Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 1/6] selftest/bpf: Support more socket types in create_pair() Michal Luczaj
2024-07-26 17:23 ` Jakub Sitnicki [this message]
2024-07-26 20:29 ` Michal Luczaj
2024-07-30 17:13 ` Jakub Sitnicki
2024-07-31 10:05 ` Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 2/6] selftest/bpf: Socket pair creation, cleanups Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 3/6] selftest/bpf: Simplify inet_socketpair() and vsock_unix_redir_connectible() Michal Luczaj
2024-07-26 10:26 ` Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 4/6] selftest/bpf: Respect the sotype of af_unix redir tests Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 5/6] selftest/bpf: Exercise SOCK_STREAM unix_inet_redir_to_connected() Michal Luczaj
2024-07-24 11:32 ` [PATCH bpf 6/6] selftest/bpf: Introduce __attribute__((cleanup)) in create_pair() Michal Luczaj
2024-07-26 17:27 ` Jakub Sitnicki
2024-07-26 20:37 ` Michal Luczaj
2024-07-26 17:36 ` [PATCH bpf 0/6] selftest/bpf: Various sockmap-related fixes Jakub Sitnicki
2024-07-26 20:45 ` Michal Luczaj
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=87cyn0kqxu.fsf@cloudflare.com \
--to=jakub@cloudflare.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mhal@rbox.co \
--cc=mykolal@fb.com \
--cc=netdev@vger.kernel.org \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--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.