Skip to content

Commit 44c4aa2

Browse files
liuhangbinAlexei Starovoitov
authored and
Alexei Starovoitov
committed
selftest/bpf: Test pinning map with reused map fd
This add a test to make sure that we can still pin maps with reused map fd. Signed-off-by: Hangbin Liu <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]> Acked-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 2c193d3 commit 44c4aa2

File tree

1 file changed

+48
-1
lines changed
  • tools/testing/selftests/bpf/prog_tests

1 file changed

+48
-1
lines changed

tools/testing/selftests/bpf/prog_tests/pinning.c

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ void test_pinning(void)
3737
struct stat statbuf = {};
3838
struct bpf_object *obj;
3939
struct bpf_map *map;
40-
int err;
40+
int err, map_fd;
4141
DECLARE_LIBBPF_OPTS(bpf_object_open_opts, opts,
4242
.pin_root_path = custpath,
4343
);
@@ -213,6 +213,53 @@ void test_pinning(void)
213213
if (CHECK(err, "stat custpinpath", "err %d errno %d\n", err, errno))
214214
goto out;
215215

216+
/* remove the custom pin path to re-test it with reuse fd below */
217+
err = unlink(custpinpath);
218+
if (CHECK(err, "unlink custpinpath", "err %d errno %d\n", err, errno))
219+
goto out;
220+
221+
err = rmdir(custpath);
222+
if (CHECK(err, "rmdir custpindir", "err %d errno %d\n", err, errno))
223+
goto out;
224+
225+
bpf_object__close(obj);
226+
227+
/* test pinning at custom path with reuse fd */
228+
obj = bpf_object__open_file(file, NULL);
229+
err = libbpf_get_error(obj);
230+
if (CHECK(err, "default open", "err %d errno %d\n", err, errno)) {
231+
obj = NULL;
232+
goto out;
233+
}
234+
235+
map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(__u32),
236+
sizeof(__u64), 1, 0);
237+
if (CHECK(map_fd < 0, "create pinmap manually", "fd %d\n", map_fd))
238+
goto out;
239+
240+
map = bpf_object__find_map_by_name(obj, "pinmap");
241+
if (CHECK(!map, "find map", "NULL map"))
242+
goto close_map_fd;
243+
244+
err = bpf_map__reuse_fd(map, map_fd);
245+
if (CHECK(err, "reuse pinmap fd", "err %d errno %d\n", err, errno))
246+
goto close_map_fd;
247+
248+
err = bpf_map__set_pin_path(map, custpinpath);
249+
if (CHECK(err, "set pin path", "err %d errno %d\n", err, errno))
250+
goto close_map_fd;
251+
252+
err = bpf_object__load(obj);
253+
if (CHECK(err, "custom load", "err %d errno %d\n", err, errno))
254+
goto close_map_fd;
255+
256+
/* check that pinmap was pinned at the custom path */
257+
err = stat(custpinpath, &statbuf);
258+
if (CHECK(err, "stat custpinpath", "err %d errno %d\n", err, errno))
259+
goto close_map_fd;
260+
261+
close_map_fd:
262+
close(map_fd);
216263
out:
217264
unlink(pinpath);
218265
unlink(nopinpath);

0 commit comments

Comments
 (0)