diff options
author | Toke Høiland-Jørgensen <toke@redhat.com> | 2019-11-09 21:37:28 +0100 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-11-10 19:26:30 -0800 |
commit | 9c4e395a1e8c1dc14189b88f24d111f80353b9a4 (patch) | |
tree | 7d02d4ac8b61e484f5c2e40bfa18bdd5af46e953 /tools/testing/selftests/bpf/prog_tests/pinning.c | |
parent | ec6d5f47bfe36f46aa0de707e5beb2f58d96b76d (diff) | |
download | linux-9c4e395a1e8c1dc14189b88f24d111f80353b9a4.tar.gz linux-9c4e395a1e8c1dc14189b88f24d111f80353b9a4.tar.bz2 linux-9c4e395a1e8c1dc14189b88f24d111f80353b9a4.zip |
selftests/bpf: Add tests for automatic map unpinning on load failure
This add tests for the different variations of automatic map unpinning on
load failure.
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/157333184838.88376.8243704248624814775.stgit@toke.dk
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/pinning.c')
-rw-r--r-- | tools/testing/selftests/bpf/prog_tests/pinning.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/pinning.c b/tools/testing/selftests/bpf/prog_tests/pinning.c index 525388971e08..041952524c55 100644 --- a/tools/testing/selftests/bpf/prog_tests/pinning.c +++ b/tools/testing/selftests/bpf/prog_tests/pinning.c @@ -163,12 +163,15 @@ void test_pinning(void) goto out; } - /* swap pin paths of the two maps */ + /* set pin paths so that nopinmap2 will attempt to reuse the map at + * pinpath (which will fail), but not before pinmap has already been + * reused + */ bpf_object__for_each_map(map, obj) { if (!strcmp(bpf_map__name(map), "nopinmap")) + err = bpf_map__set_pin_path(map, nopinpath2); + else if (!strcmp(bpf_map__name(map), "nopinmap2")) err = bpf_map__set_pin_path(map, pinpath); - else if (!strcmp(bpf_map__name(map), "pinmap")) - err = bpf_map__set_pin_path(map, NULL); else continue; @@ -181,6 +184,17 @@ void test_pinning(void) if (CHECK(err != -EINVAL, "param mismatch load", "err %d errno %d\n", err, errno)) goto out; + /* nopinmap2 should have been pinned and cleaned up again */ + err = stat(nopinpath2, &statbuf); + if (CHECK(!err || errno != ENOENT, "stat nopinpath2", + "err %d errno %d\n", err, errno)) + goto out; + + /* pinmap should still be there */ + err = stat(pinpath, &statbuf); + if (CHECK(err, "stat pinpath", "err %d errno %d\n", err, errno)) + goto out; + bpf_object__close(obj); /* test auto-pinning at custom path with open opt */ |