]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Fix SENDPAGE data logic in test_sockmap
authorZijian Zhang <zijianzhang@bytedance.com>
Wed, 6 Nov 2024 22:25:14 +0000 (22:25 +0000)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 7 Nov 2024 00:01:53 +0000 (16:01 -0800)
In the SENDPAGE test, "opt->iov_length * cnt" size of data will be sent
cnt times by sendfile.
1. In push/pop tests, they will be invoked cnt times, for the simplicity of
msg_verify_data, change chunk_sz to iov_length
2. Change iov_length in test_send_large from 1024 to 8192. We have pop test
where txmsg_start_pop is 4096. 4096 > 1024, an error will be returned.

Fixes: 328aa08a081b ("bpf: Selftests, break down test_sockmap into subtests")
Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20241106222520.527076-3-zijianzhang@bytedance.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
tools/testing/selftests/bpf/test_sockmap.c

index 0f065273fde32f2e354361e6044be9bdebe9df09..1d59bed90d80b0b5df109955764781371a945c71 100644 (file)
@@ -420,16 +420,18 @@ static int msg_loop_sendpage(int fd, int iov_length, int cnt,
 {
        bool drop = opt->drop_expected;
        unsigned char k = 0;
+       int i, j, fp;
        FILE *file;
-       int i, fp;
 
        file = tmpfile();
        if (!file) {
                perror("create file for sendpage");
                return 1;
        }
-       for (i = 0; i < iov_length * cnt; i++, k++)
-               fwrite(&k, sizeof(char), 1, file);
+       for (i = 0; i < cnt; i++, k = 0) {
+               for (j = 0; j < iov_length; j++, k++)
+                       fwrite(&k, sizeof(char), 1, file);
+       }
        fflush(file);
        fseek(file, 0, SEEK_SET);
 
@@ -623,7 +625,9 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
                 * This is really only useful for testing edge cases in code
                 * paths.
                 */
-               total_bytes = (float)iov_count * (float)iov_length * (float)cnt;
+               total_bytes = (float)iov_length * (float)cnt;
+               if (!opt->sendpage)
+                       total_bytes *= (float)iov_count;
                if (txmsg_apply)
                        txmsg_pop_total = txmsg_pop * (total_bytes / txmsg_apply);
                else
@@ -701,7 +705,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
 
                        if (data) {
                                int chunk_sz = opt->sendpage ?
-                                               iov_length * cnt :
+                                               iov_length :
                                                iov_length * iov_count;
 
                                errno = msg_verify_data(&msg, recv, chunk_sz, &k, &bytes_cnt);
@@ -1466,8 +1470,8 @@ static void test_send_many(struct sockmap_options *opt, int cgrp)
 
 static void test_send_large(struct sockmap_options *opt, int cgrp)
 {
-       opt->iov_length = 256;
-       opt->iov_count = 1024;
+       opt->iov_length = 8192;
+       opt->iov_count = 32;
        opt->rate = 2;
        test_exec(cgrp, opt);
 }