Skip to content

Commit

Permalink
bpftool: Do not expose and init hash maps for pinned path in main.c
Browse files Browse the repository at this point in the history
BPF programs, maps, and links, can all be listed with their pinned paths
by bpftool, when the "-f" option is provided. To do so, bpftool builds
hash maps containing all pinned paths for each kind of objects.

These three hash maps are always initialised in main.c, and exposed
through main.h. There appear to be no particular reason to do so: we can
just as well make them static to the files that need them (prog.c,
map.c, and link.c respectively), and initialise them only when we want
to show objects and the "-f" switch is provided.

This may prevent unnecessary memory allocations if the implementation of
the hash maps was to change in the future.

Signed-off-by: Quentin Monnet <[email protected]>
Signed-off-by: Andrii Nakryiko <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
  • Loading branch information
qmonnet authored and anakryiko committed Oct 26, 2021
1 parent 8b6c462 commit 4624127
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 18 deletions.
9 changes: 8 additions & 1 deletion tools/bpf/bpftool/link.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ static const char * const link_type_name[] = {
[BPF_LINK_TYPE_NETNS] = "netns",
};

static struct pinned_obj_table link_table;

static int link_parse_fd(int *argc, char ***argv)
{
int fd;
Expand Down Expand Up @@ -302,8 +304,10 @@ static int do_show(int argc, char **argv)
__u32 id = 0;
int err, fd;

if (show_pinned)
if (show_pinned) {
hash_init(link_table.table);
build_pinned_obj_table(&link_table, BPF_OBJ_LINK);
}
build_obj_refs_table(&refs_table, BPF_OBJ_LINK);

if (argc == 2) {
Expand Down Expand Up @@ -346,6 +350,9 @@ static int do_show(int argc, char **argv)

delete_obj_refs_table(&refs_table);

if (show_pinned)
delete_pinned_obj_table(&link_table);

return errno == ENOENT ? 0 : -1;
}

Expand Down
12 changes: 0 additions & 12 deletions tools/bpf/bpftool/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@ bool verifier_logs;
bool relaxed_maps;
bool use_loader;
struct btf *base_btf;
struct pinned_obj_table prog_table;
struct pinned_obj_table map_table;
struct pinned_obj_table link_table;
struct obj_refs_table refs_table;

static void __noreturn clean_and_exit(int i)
Expand Down Expand Up @@ -409,10 +406,6 @@ int main(int argc, char **argv)
block_mount = false;
bin_name = argv[0];

hash_init(prog_table.table);
hash_init(map_table.table);
hash_init(link_table.table);

opterr = 0;
while ((opt = getopt_long(argc, argv, "VhpjfLmndB:",
options, NULL)) >= 0) {
Expand Down Expand Up @@ -479,11 +472,6 @@ int main(int argc, char **argv)
if (json_output)
jsonw_destroy(&json_wtr);

if (show_pinned) {
delete_pinned_obj_table(&prog_table);
delete_pinned_obj_table(&map_table);
delete_pinned_obj_table(&link_table);
}
btf__free(base_btf);

return ret;
Expand Down
3 changes: 0 additions & 3 deletions tools/bpf/bpftool/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,6 @@ extern bool verifier_logs;
extern bool relaxed_maps;
extern bool use_loader;
extern struct btf *base_btf;
extern struct pinned_obj_table prog_table;
extern struct pinned_obj_table map_table;
extern struct pinned_obj_table link_table;
extern struct obj_refs_table refs_table;

void __printf(1, 2) p_err(const char *fmt, ...);
Expand Down
9 changes: 8 additions & 1 deletion tools/bpf/bpftool/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ const char * const map_type_name[] = {

const size_t map_type_name_size = ARRAY_SIZE(map_type_name);

static struct pinned_obj_table map_table;

static bool map_is_per_cpu(__u32 type)
{
return type == BPF_MAP_TYPE_PERCPU_HASH ||
Expand Down Expand Up @@ -694,8 +696,10 @@ static int do_show(int argc, char **argv)
int err;
int fd;

if (show_pinned)
if (show_pinned) {
hash_init(map_table.table);
build_pinned_obj_table(&map_table, BPF_OBJ_MAP);
}
build_obj_refs_table(&refs_table, BPF_OBJ_MAP);

if (argc == 2)
Expand Down Expand Up @@ -742,6 +746,9 @@ static int do_show(int argc, char **argv)

delete_obj_refs_table(&refs_table);

if (show_pinned)
delete_pinned_obj_table(&map_table);

return errno == ENOENT ? 0 : -1;
}

Expand Down
9 changes: 8 additions & 1 deletion tools/bpf/bpftool/prog.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ static const char * const attach_type_strings[] = {
[__MAX_BPF_ATTACH_TYPE] = NULL,
};

static struct pinned_obj_table prog_table;

static enum bpf_attach_type parse_attach_type(const char *str)
{
enum bpf_attach_type type;
Expand Down Expand Up @@ -567,8 +569,10 @@ static int do_show(int argc, char **argv)
int err;
int fd;

if (show_pinned)
if (show_pinned) {
hash_init(prog_table.table);
build_pinned_obj_table(&prog_table, BPF_OBJ_PROG);
}
build_obj_refs_table(&refs_table, BPF_OBJ_PROG);

if (argc == 2)
Expand Down Expand Up @@ -613,6 +617,9 @@ static int do_show(int argc, char **argv)

delete_obj_refs_table(&refs_table);

if (show_pinned)
delete_pinned_obj_table(&prog_table);

return err;
}

Expand Down

0 comments on commit 4624127

Please sign in to comment.