Message ID | f0b66813ae8274e5653988d80d16171508f05796.1712042049.git.tanggeliang@kylinos.cn (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | refactor mptcp bpf tests | expand |
Context | Check | Description |
---|---|---|
matttbe/build | success | Build and static analysis OK |
matttbe/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 30 lines checked |
matttbe/shellcheck | success | MPTCP selftests files have not been modified |
matttbe/KVM_Validation__normal | success | Success! ✅ |
matttbe/KVM_Validation__debug | warning | Unstable: 1 failed test(s): selftest_mptcp_join |
matttbe/KVM_Validation__btf__only_bpftest_all_ | success | Success! ✅ |
On Tue, 2024-04-02 at 15:15 +0800, Geliang Tang wrote: > From: Geliang Tang <tanggeliang@kylinos.cn> > > BPF tests fail sometimes with "bytes != total_bytes" errors: > > # test_default:PASS:sched_init:default 0 nsec > # send_data:PASS:pthread_create 0 nsec > # send_data:FAIL:recv 936000 != 10485760 nr_recv:-1 errno:11 > # default: 3041 ms > # server:FAIL:send 7579500 != 10485760 nr_sent:-1 errno:11 > # send_data:FAIL:pthread_join thread_ret:-11 \ > test_default:PASS:has_bytes_sent addr_1 0 nsec > # test_default:PASS:has_bytes_sent addr_2 0 nsec > # close_netns:PASS:setns 0 nsec > > Here errno 11 is EAGAIN. This patch sets server socket to nonblock > to fix this. It makes BPF tests stable. > > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> > --- > tools/testing/selftests/bpf/prog_tests/mptcp.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c > b/tools/testing/selftests/bpf/prog_tests/mptcp.c > index 6e28215d7404..d3d51aee440d 100644 > --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c > +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c > @@ -88,6 +88,16 @@ static void cleanup_netns(struct nstoken *nstoken) > SYS_NOFAIL("ip netns del %s", NS_TEST); > } > > +static int set_nonblock(int fd) > +{ > + int flags = fcntl(fd, F_GETFL); > + > + if (flags == -1) > + return -1; > + > + return fcntl(fd, flags | O_NONBLOCK); This fix is incorrect. fcntl shouldn't be used like this. I'll think about how to modify it again. BTW, Other patches in this series are still valid. But needs to be rebased. Thanks, -Geliang > +} > + > static int verify_tsk(int map_fd, int client_fd) > { > int err, cfd = client_fd; > @@ -466,6 +476,7 @@ static void test_default(void) > server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); > client_fd = connect_to_fd(server_fd, 0); > > + set_nonblock(server_fd); > send_data(server_fd, client_fd, "default"); > ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1"); > ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2"); > @@ -639,6 +650,7 @@ static void test_burst(void) > server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); > client_fd = connect_to_fd(server_fd, 0); > > + set_nonblock(server_fd); > send_data(server_fd, client_fd, "bpf_burst"); > ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1"); > ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index 6e28215d7404..d3d51aee440d 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -88,6 +88,16 @@ static void cleanup_netns(struct nstoken *nstoken) SYS_NOFAIL("ip netns del %s", NS_TEST); } +static int set_nonblock(int fd) +{ + int flags = fcntl(fd, F_GETFL); + + if (flags == -1) + return -1; + + return fcntl(fd, flags | O_NONBLOCK); +} + static int verify_tsk(int map_fd, int client_fd) { int err, cfd = client_fd; @@ -466,6 +476,7 @@ static void test_default(void) server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); client_fd = connect_to_fd(server_fd, 0); + set_nonblock(server_fd); send_data(server_fd, client_fd, "default"); ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1"); ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2"); @@ -639,6 +650,7 @@ static void test_burst(void) server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); client_fd = connect_to_fd(server_fd, 0); + set_nonblock(server_fd); send_data(server_fd, client_fd, "bpf_burst"); ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1"); ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");