]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Fix total_bytes in msg_loop_rx in test_sockmap
authorZijian Zhang <zijianzhang@bytedance.com>
Wed, 6 Nov 2024 22:25:15 +0000 (22:25 +0000)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 7 Nov 2024 00:01:53 +0000 (16:01 -0800)
total_bytes in msg_loop_rx should also take push into account, otherwise
total_bytes will be a smaller value, which makes the msg_loop_rx end early.

Besides, total_bytes has already taken pop into account, so we don't need
to subtract some bytes from iov_buf in sendmsg_test. The additional
subtraction may make total_bytes a negative number, and msg_loop_rx will
just end without checking anything.

Fixes: 18d4e900a450 ("bpf: Selftests, improve test_sockmap total bytes counter")
Fixes: d69672147faa ("selftests, bpf: Add one test for sockmap with strparser")
Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20241106222520.527076-4-zijianzhang@bytedance.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
tools/testing/selftests/bpf/test_sockmap.c

index 1d59bed90d80b0b5df109955764781371a945c71..5f4558f1f00498841de18f2caeee03e1cb8330c8 100644 (file)
@@ -606,8 +606,8 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
                }
                clock_gettime(CLOCK_MONOTONIC, &s->end);
        } else {
+               float total_bytes, txmsg_pop_total, txmsg_push_total;
                int slct, recvp = 0, recv, max_fd = fd;
-               float total_bytes, txmsg_pop_total;
                int fd_flags = O_NONBLOCK;
                struct timeval timeout;
                unsigned char k = 0;
@@ -628,10 +628,14 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
                total_bytes = (float)iov_length * (float)cnt;
                if (!opt->sendpage)
                        total_bytes *= (float)iov_count;
-               if (txmsg_apply)
+               if (txmsg_apply) {
+                       txmsg_push_total = txmsg_end_push * (total_bytes / txmsg_apply);
                        txmsg_pop_total = txmsg_pop * (total_bytes / txmsg_apply);
-               else
+               } else {
+                       txmsg_push_total = txmsg_end_push * cnt;
                        txmsg_pop_total = txmsg_pop * cnt;
+               }
+               total_bytes += txmsg_push_total;
                total_bytes -= txmsg_pop_total;
                err = clock_gettime(CLOCK_MONOTONIC, &s->start);
                if (err < 0)
@@ -800,8 +804,6 @@ static int sendmsg_test(struct sockmap_options *opt)
 
        rxpid = fork();
        if (rxpid == 0) {
-               if (txmsg_pop || txmsg_start_pop)
-                       iov_buf -= (txmsg_pop - txmsg_start_pop + 1);
                if (opt->drop_expected || txmsg_ktls_skb_drop)
                        _exit(0);