libbpf: Remove unused bpf_link's destroy operation, but add dealloc
authorAndrii Nakryiko <andrii@kernel.org>
Sun, 15 Aug 2021 07:06:01 +0000 (00:06 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 16 Aug 2021 22:45:08 +0000 (00:45 +0200)
bpf_link->destroy() isn't used by any code, so remove it. Instead, add ability
to override deallocation procedure, with default doing plain free(link). This
is necessary for cases when we want to "subclass" struct bpf_link to keep
extra information, as is the case in the next patch adding struct
bpf_link_perf.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20210815070609.987780-9-andrii@kernel.org
tools/lib/bpf/libbpf.c

index ff3c0ee79d85e15bc48bc3cef6e5fb4ab01105e4..d30e3282bfc7fd7fdbb31f34bf9e3f3c07ed47e9 100644 (file)
@@ -8810,7 +8810,7 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,
 
 struct bpf_link {
        int (*detach)(struct bpf_link *link);
-       int (*destroy)(struct bpf_link *link);
+       void (*dealloc)(struct bpf_link *link);
        char *pin_path;         /* NULL, if not pinned */
        int fd;                 /* hook FD, -1 if not applicable */
        bool disconnected;
@@ -8849,11 +8849,12 @@ int bpf_link__destroy(struct bpf_link *link)
 
        if (!link->disconnected && link->detach)
                err = link->detach(link);
-       if (link->destroy)
-               link->destroy(link);
        if (link->pin_path)
                free(link->pin_path);
-       free(link);
+       if (link->dealloc)
+               link->dealloc(link);
+       else
+               free(link);
 
        return libbpf_err(err);
 }