]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Reduce more flakyness in sockmap_listen
authorYucong Sun <fallentree@fb.com>
Wed, 25 Aug 2021 18:47:45 +0000 (11:47 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 26 Aug 2021 18:55:25 +0000 (11:55 -0700)
This patch adds similar retry logic to more places where read() is used, to
reduce flakyness in slow CI environment.

Signed-off-by: Yucong Sun <fallentree@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210825184745.2680830-1-fallentree@fb.com
tools/testing/selftests/bpf/prog_tests/sockmap_listen.c

index 6a5df28f9a3d56f0aecf0cfe63cce9140b9877ac..5c5979046523e2a30398bb11745ac53b345bbe01 100644 (file)
@@ -949,6 +949,7 @@ static void redir_to_connected(int family, int sotype, int sock_mapfd,
        int err, n;
        u32 key;
        char b;
+       int retries = 100;
 
        zero_verdict_count(verd_mapfd);
 
@@ -1001,10 +1002,15 @@ static void redir_to_connected(int family, int sotype, int sock_mapfd,
                goto close_peer1;
        if (pass != 1)
                FAIL("%s: want pass count 1, have %d", log_prefix, pass);
-
+again:
        n = read(c0, &b, 1);
-       if (n < 0)
+       if (n < 0) {
+               if (errno == EAGAIN && retries--) {
+                       usleep(1000);
+                       goto again;
+               }
                FAIL_ERRNO("%s: read", log_prefix);
+       }
        if (n == 0)
                FAIL("%s: incomplete read", log_prefix);
 
@@ -1926,6 +1932,7 @@ static void unix_inet_redir_to_connected(int family, int type, int sock_mapfd,
        int sfd[2];
        u32 key;
        char b;
+       int retries = 100;
 
        zero_verdict_count(verd_mapfd);
 
@@ -1956,9 +1963,15 @@ static void unix_inet_redir_to_connected(int family, int type, int sock_mapfd,
        if (pass != 1)
                FAIL("%s: want pass count 1, have %d", log_prefix, pass);
 
+again:
        n = read(mode == REDIR_INGRESS ? p0 : c0, &b, 1);
-       if (n < 0)
+       if (n < 0) {
+               if (errno == EAGAIN && retries--) {
+                       usleep(1000);
+                       goto again;
+               }
                FAIL_ERRNO("%s: read", log_prefix);
+       }
        if (n == 0)
                FAIL("%s: incomplete read", log_prefix);