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:
parent
4116625fb3
commit
b1293e8098
1 changed files with 11 additions and 7 deletions
|
@ -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) {
|
||||||
fwrite(&k, sizeof(char), 1, file);
|
for (j = 0; j < iov_length; j++, k++)
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue