Message ID | 157314554027.693412.3764267220990589755.stgit@toke.dk |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | libbpf: Fix pinning and error message bugs and add new getters | expand |
On Thu, Nov 7, 2019 at 8:52 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: > > From: Toke Høiland-Jørgensen <toke@redhat.com> > > 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> > --- [...] > diff --git a/tools/testing/selftests/bpf/progs/test_pinning.c b/tools/testing/selftests/bpf/progs/test_pinning.c > index f69a4a50d056..f20e7e00373f 100644 > --- a/tools/testing/selftests/bpf/progs/test_pinning.c > +++ b/tools/testing/selftests/bpf/progs/test_pinning.c > @@ -21,7 +21,7 @@ struct { > } nopinmap SEC(".maps"); > > struct { > - __uint(type, BPF_MAP_TYPE_ARRAY); > + __uint(type, BPF_MAP_TYPE_HASH); Why do we need this change? > __uint(max_entries, 1); > __type(key, __u32); > __type(value, __u64); >
Song Liu <liu.song.a23@gmail.com> writes: > On Thu, Nov 7, 2019 at 8:52 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: >> >> From: Toke Høiland-Jørgensen <toke@redhat.com> >> >> 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> >> --- > > [...] > >> diff --git a/tools/testing/selftests/bpf/progs/test_pinning.c b/tools/testing/selftests/bpf/progs/test_pinning.c >> index f69a4a50d056..f20e7e00373f 100644 >> --- a/tools/testing/selftests/bpf/progs/test_pinning.c >> +++ b/tools/testing/selftests/bpf/progs/test_pinning.c >> @@ -21,7 +21,7 @@ struct { >> } nopinmap SEC(".maps"); >> >> struct { >> - __uint(type, BPF_MAP_TYPE_ARRAY); >> + __uint(type, BPF_MAP_TYPE_HASH); > > Why do we need this change? Because it needs to be different from the top map: I'm changing which of the maps to use for the "check for parameter mismatch" selftest; the last map needs to be the one that fails, so that a previous one can succeed first and get removed on failure clean-up (which we can then test for)... -Toke
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 */ diff --git a/tools/testing/selftests/bpf/progs/test_pinning.c b/tools/testing/selftests/bpf/progs/test_pinning.c index f69a4a50d056..f20e7e00373f 100644 --- a/tools/testing/selftests/bpf/progs/test_pinning.c +++ b/tools/testing/selftests/bpf/progs/test_pinning.c @@ -21,7 +21,7 @@ struct { } nopinmap SEC(".maps"); struct { - __uint(type, BPF_MAP_TYPE_ARRAY); + __uint(type, BPF_MAP_TYPE_HASH); __uint(max_entries, 1); __type(key, __u32); __type(value, __u64);