selftests/bpf: Fix SENDPAGE data logic in test_sockmap

[ Upstream commit 4095031463d4e99b534d2cd82035a417295764ae ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Zijian Zhang 2024-11-06 22:25:14 +00:00 committed by Ksawlii
parent 4116625fb3
commit b1293e8098

View file

@ -419,16 +419,18 @@ static int msg_loop_sendpage(int fd, int iov_length, int cnt,
{ {
bool drop = opt->drop_expected; bool drop = opt->drop_expected;
unsigned char k = 0; unsigned char k = 0;
int i, j, fp;
FILE *file; FILE *file;
int i, fp;
file = tmpfile(); file = tmpfile();
if (!file) { if (!file) {
perror("create file for sendpage"); perror("create file for sendpage");
return 1; return 1;
} }
for (i = 0; i < iov_length * cnt; i++, k++) for (i = 0; i < cnt; i++, k = 0) {
for (j = 0; j < iov_length; j++, k++)
fwrite(&k, sizeof(char), 1, file); fwrite(&k, sizeof(char), 1, file);
}
fflush(file); fflush(file);
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
@ -614,7 +616,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 * This is really only useful for testing edge cases in code
* paths. * 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) if (txmsg_apply)
txmsg_pop_total = txmsg_pop * (total_bytes / txmsg_apply); txmsg_pop_total = txmsg_pop * (total_bytes / txmsg_apply);
else else
@ -676,7 +680,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
if (data) { if (data) {
int chunk_sz = opt->sendpage ? int chunk_sz = opt->sendpage ?
iov_length * cnt : iov_length :
iov_length * iov_count; iov_length * iov_count;
errno = msg_verify_data(&msg, recv, chunk_sz, &k, &bytes_cnt); errno = msg_verify_data(&msg, recv, chunk_sz, &k, &bytes_cnt);
@ -1425,8 +1429,8 @@ static void test_send_many(struct sockmap_options *opt, int cgrp)
static void test_send_large(struct sockmap_options *opt, int cgrp) static void test_send_large(struct sockmap_options *opt, int cgrp)
{ {
opt->iov_length = 256; opt->iov_length = 8192;
opt->iov_count = 1024; opt->iov_count = 32;
opt->rate = 2; opt->rate = 2;
test_exec(cgrp, opt); test_exec(cgrp, opt);
} }