Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf, selftests: Use single cgroup helpers for both test_sockmap/progs

Nearly every user of cgroup helpers does the same sequence of API calls. So
push these into a single helper cgroup_setup_and_join. The cases that do
a bit of extra logic are test_progs which currently uses an env variable
to decide if it needs to setup the cgroup environment or can use an
existingi environment. And then tests that are doing cgroup tests
themselves. We skip these cases for now.

Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/159623335418.30208.15807461815525100199.stgit@john-XPS-13-9370

authored by

John Fastabend and committed by
Alexei Starovoitov
4939b284 ffba964e

+43 -132
+23
tools/testing/selftests/bpf/cgroup_helpers.c
··· 290 290 free(fhp); 291 291 return ret; 292 292 } 293 + 294 + int cgroup_setup_and_join(const char *path) { 295 + int cg_fd; 296 + 297 + if (setup_cgroup_environment()) { 298 + fprintf(stderr, "Failed to setup cgroup environment\n"); 299 + return -EINVAL; 300 + } 301 + 302 + cg_fd = create_and_get_cgroup(path); 303 + if (cg_fd < 0) { 304 + fprintf(stderr, "Failed to create test cgroup\n"); 305 + cleanup_cgroup_environment(); 306 + return cg_fd; 307 + } 308 + 309 + if (join_cgroup(path)) { 310 + fprintf(stderr, "Failed to join cgroup\n"); 311 + cleanup_cgroup_environment(); 312 + return -EINVAL; 313 + } 314 + return cg_fd; 315 + }
+1
tools/testing/selftests/bpf/cgroup_helpers.h
··· 9 9 __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) 10 10 11 11 12 + int cgroup_setup_and_join(const char *path); 12 13 int create_and_get_cgroup(const char *path); 13 14 int join_cgroup(const char *path); 14 15 int setup_cgroup_environment(void);
+2 -12
tools/testing/selftests/bpf/get_cgroup_id_user.c
··· 58 58 int exit_code = 1; 59 59 char buf[256]; 60 60 61 - err = setup_cgroup_environment(); 62 - if (CHECK(err, "setup_cgroup_environment", "err %d errno %d\n", err, 63 - errno)) 61 + cgroup_fd = cgroup_setup_and_join(TEST_CGROUP); 62 + if (CHECK(cgroup_fd < 0, "cgroup_setup_and_join", "err %d errno %d\n", cgroup_fd, errno)) 64 63 return 1; 65 - 66 - cgroup_fd = create_and_get_cgroup(TEST_CGROUP); 67 - if (CHECK(cgroup_fd < 0, "create_and_get_cgroup", "err %d errno %d\n", 68 - cgroup_fd, errno)) 69 - goto cleanup_cgroup_env; 70 - 71 - err = join_cgroup(TEST_CGROUP); 72 - if (CHECK(err, "join_cgroup", "err %d errno %d\n", err, errno)) 73 - goto cleanup_cgroup_env; 74 64 75 65 err = bpf_prog_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd); 76 66 if (CHECK(err, "bpf_prog_load", "err %d errno %d\n", err, errno))
+1 -16
tools/testing/selftests/bpf/test_cgroup_storage.c
··· 74 74 goto out; 75 75 } 76 76 77 - if (setup_cgroup_environment()) { 78 - printf("Failed to setup cgroup environment\n"); 79 - goto err; 80 - } 81 - 82 - /* Create a cgroup, get fd, and join it */ 83 - cgroup_fd = create_and_get_cgroup(TEST_CGROUP); 84 - if (cgroup_fd < 0) { 85 - printf("Failed to create test cgroup\n"); 86 - goto err; 87 - } 88 - 89 - if (join_cgroup(TEST_CGROUP)) { 90 - printf("Failed to join cgroup\n"); 91 - goto err; 92 - } 77 + cgroup_fd = cgroup_setup_and_join(TEST_CGROUP); 93 78 94 79 /* Attach the bpf program */ 95 80 if (bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_INET_EGRESS, 0)) {
+2 -13
tools/testing/selftests/bpf/test_dev_cgroup.c
··· 33 33 goto out; 34 34 } 35 35 36 - if (setup_cgroup_environment()) { 37 - printf("Failed to load DEV_CGROUP program\n"); 38 - goto err; 39 - } 40 - 41 - /* Create a cgroup, get fd, and join it */ 42 - cgroup_fd = create_and_get_cgroup(TEST_CGROUP); 36 + cgroup_fd = cgroup_setup_and_join(TEST_CGROUP); 43 37 if (cgroup_fd < 0) { 44 38 printf("Failed to create test cgroup\n"); 45 - goto err; 46 - } 47 - 48 - if (join_cgroup(TEST_CGROUP)) { 49 - printf("Failed to join cgroup\n"); 50 - goto err; 39 + goto out; 51 40 } 52 41 53 42 /* Attach bpf program */
+2 -15
tools/testing/selftests/bpf/test_netcnt.c
··· 58 58 goto out; 59 59 } 60 60 61 - if (setup_cgroup_environment()) { 62 - printf("Failed to load bpf program\n"); 61 + cgroup_fd = cgroup_setup_and_join(TEST_CGROUP); 62 + if (cgroup_fd < 0) 63 63 goto err; 64 - } 65 - 66 - /* Create a cgroup, get fd, and join it */ 67 - cgroup_fd = create_and_get_cgroup(TEST_CGROUP); 68 - if (cgroup_fd < 0) { 69 - printf("Failed to create test cgroup\n"); 70 - goto err; 71 - } 72 - 73 - if (join_cgroup(TEST_CGROUP)) { 74 - printf("Failed to join cgroup\n"); 75 - goto err; 76 - } 77 64 78 65 /* Attach bpf program */ 79 66 if (bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_INET_EGRESS, 0)) {
+1 -7
tools/testing/selftests/bpf/test_skb_cgroup_id_user.c
··· 160 160 exit(EXIT_FAILURE); 161 161 } 162 162 163 - if (setup_cgroup_environment()) 164 - goto err; 165 - 166 - cgfd = create_and_get_cgroup(CGROUP_PATH); 163 + cgfd = cgroup_setup_and_join(CGROUP_PATH); 167 164 if (cgfd < 0) 168 - goto err; 169 - 170 - if (join_cgroup(CGROUP_PATH)) 171 165 goto err; 172 166 173 167 if (send_packet(argv[1]))
+1 -7
tools/testing/selftests/bpf/test_sock.c
··· 464 464 int cgfd = -1; 465 465 int err = 0; 466 466 467 - if (setup_cgroup_environment()) 468 - goto err; 469 - 470 - cgfd = create_and_get_cgroup(CG_PATH); 467 + cgfd = cgroup_setup_and_join(CG_PATH); 471 468 if (cgfd < 0) 472 - goto err; 473 - 474 - if (join_cgroup(CG_PATH)) 475 469 goto err; 476 470 477 471 if (run_tests(cgfd))
+1 -7
tools/testing/selftests/bpf/test_sock_addr.c
··· 1638 1638 exit(err); 1639 1639 } 1640 1640 1641 - if (setup_cgroup_environment()) 1642 - goto err; 1643 - 1644 - cgfd = create_and_get_cgroup(CG_PATH); 1641 + cgfd = cgroup_setup_and_join(CG_PATH); 1645 1642 if (cgfd < 0) 1646 - goto err; 1647 - 1648 - if (join_cgroup(CG_PATH)) 1649 1643 goto err; 1650 1644 1651 1645 if (run_tests(cgfd))
+3 -11
tools/testing/selftests/bpf/test_sock_fields.c
··· 421 421 struct bpf_object *obj; 422 422 struct bpf_map *map; 423 423 424 - err = setup_cgroup_environment(); 425 - CHECK(err, "setup_cgroup_environment()", "err:%d errno:%d", 426 - err, errno); 427 - 428 - atexit(cleanup_cgroup_environment); 429 - 430 424 /* Create a cgroup, get fd, and join it */ 431 - cgroup_fd = create_and_get_cgroup(TEST_CGROUP); 432 - CHECK(cgroup_fd == -1, "create_and_get_cgroup()", 425 + cgroup_fd = cgroup_setup_and_join(TEST_CGROUP); 426 + CHECK(cgroup_fd < 0, "cgroup_setup_and_join()", 433 427 "cgroup_fd:%d errno:%d", cgroup_fd, errno); 434 - 435 - err = join_cgroup(TEST_CGROUP); 436 - CHECK(err, "join_cgroup", "err:%d errno:%d", err, errno); 428 + atexit(cleanup_cgroup_environment); 437 429 438 430 err = bpf_prog_load_xattr(&attr, &obj, &egress_fd); 439 431 CHECK(err, "bpf_prog_load_xattr()", "err:%d", err);
+1 -7
tools/testing/selftests/bpf/test_socket_cookie.c
··· 191 191 int cgfd = -1; 192 192 int err = 0; 193 193 194 - if (setup_cgroup_environment()) 195 - goto err; 196 - 197 - cgfd = create_and_get_cgroup(CG_PATH); 194 + cgfd = cgroup_setup_and_join(CG_PATH); 198 195 if (cgfd < 0) 199 - goto err; 200 - 201 - if (join_cgroup(CG_PATH)) 202 196 goto err; 203 197 204 198 if (run_test(cgfd))
+2 -16
tools/testing/selftests/bpf/test_sockmap.c
··· 1963 1963 } 1964 1964 1965 1965 if (!cg_fd) { 1966 - if (setup_cgroup_environment()) { 1967 - fprintf(stderr, "ERROR: cgroup env failed\n"); 1968 - return -EINVAL; 1969 - } 1970 - 1971 - cg_fd = create_and_get_cgroup(CG_PATH); 1972 - if (cg_fd < 0) { 1973 - fprintf(stderr, 1974 - "ERROR: (%i) open cg path failed: %s\n", 1975 - cg_fd, strerror(errno)); 1966 + cg_fd = cgroup_setup_and_join(CG_PATH); 1967 + if (cg_fd < 0) 1976 1968 return cg_fd; 1977 - } 1978 - 1979 - if (join_cgroup(CG_PATH)) { 1980 - fprintf(stderr, "ERROR: failed to join cgroup\n"); 1981 - return -EINVAL; 1982 - } 1983 1969 cg_created = 1; 1984 1970 } 1985 1971
+1 -7
tools/testing/selftests/bpf/test_sysctl.c
··· 1619 1619 int cgfd = -1; 1620 1620 int err = 0; 1621 1621 1622 - if (setup_cgroup_environment()) 1623 - goto err; 1624 - 1625 - cgfd = create_and_get_cgroup(CG_PATH); 1622 + cgfd = cgroup_setup_and_join(CG_PATH); 1626 1623 if (cgfd < 0) 1627 - goto err; 1628 - 1629 - if (join_cgroup(CG_PATH)) 1630 1624 goto err; 1631 1625 1632 1626 if (run_tests(cgfd))
+1 -7
tools/testing/selftests/bpf/test_tcpbpf_user.c
··· 102 102 __u32 key = 0; 103 103 int rv; 104 104 105 - if (setup_cgroup_environment()) 106 - goto err; 107 - 108 - cg_fd = create_and_get_cgroup(cg_path); 105 + cg_fd = cgroup_setup_and_join(cg_path); 109 106 if (cg_fd < 0) 110 - goto err; 111 - 112 - if (join_cgroup(cg_path)) 113 107 goto err; 114 108 115 109 if (bpf_prog_load(file, BPF_PROG_TYPE_SOCK_OPS, &obj, &prog_fd)) {
+1 -7
tools/testing/selftests/bpf/test_tcpnotify_user.c
··· 86 86 CPU_SET(0, &cpuset); 87 87 pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); 88 88 89 - if (setup_cgroup_environment()) 90 - goto err; 91 - 92 - cg_fd = create_and_get_cgroup(cg_path); 89 + cg_fd = cgroup_setup_and_join(cg_path); 93 90 if (cg_fd < 0) 94 - goto err; 95 - 96 - if (join_cgroup(cg_path)) 97 91 goto err; 98 92 99 93 if (bpf_prog_load(file, BPF_PROG_TYPE_SOCK_OPS, &obj, &prog_fd)) {