From aff95b8c43d70b7e8049fceba7dd076436cc19b4 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Fri, 1 Aug 2025 14:10:53 +0200 Subject: [PATCH] bpf: Add LINK_DETACH for iter and perf links 73b11c2a introduced LINK_DETACH and implemented it for some link types, like xdp, netns and others. This patch implements LINK_DETACH for perf and iter links, re-using existing link release handling code. Signed-off-by: Florian Lehner Acked-by: Yonghong Song --- kernel/bpf/bpf_iter.c | 7 +++++++ kernel/bpf/syscall.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/kernel/bpf/bpf_iter.c b/kernel/bpf/bpf_iter.c index 0cbcae7270790..823dad09735dd 100644 --- a/kernel/bpf/bpf_iter.c +++ b/kernel/bpf/bpf_iter.c @@ -397,6 +397,12 @@ static void bpf_iter_link_release(struct bpf_link *link) iter_link->tinfo->reg_info->detach_target(&iter_link->aux); } +static int bpf_iter_link_detach(struct bpf_link *link) +{ + bpf_iter_link_release(link); + return 0; +} + static void bpf_iter_link_dealloc(struct bpf_link *link) { struct bpf_iter_link *iter_link = @@ -490,6 +496,7 @@ static int bpf_iter_link_fill_link_info(const struct bpf_link *link, static const struct bpf_link_ops bpf_iter_link_lops = { .release = bpf_iter_link_release, + .detach = bpf_iter_link_detach, .dealloc = bpf_iter_link_dealloc, .update_prog = bpf_iter_link_replace, .show_fdinfo = bpf_iter_link_show_fdinfo, diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 0fbfa8532c392..2c02c19e1e8f0 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3740,6 +3740,12 @@ static void bpf_perf_link_release(struct bpf_link *link) fput(perf_link->perf_file); } +static int bpf_perf_link_detach(struct bpf_link *link) +{ + bpf_perf_link_release(link); + return 0; +} + static void bpf_perf_link_dealloc(struct bpf_link *link) { struct bpf_perf_link *perf_link = container_of(link, struct bpf_perf_link, link); @@ -4034,6 +4040,7 @@ static void bpf_perf_link_show_fdinfo(const struct bpf_link *link, static const struct bpf_link_ops bpf_perf_link_lops = { .release = bpf_perf_link_release, + .detach = bpf_perf_link_detach, .dealloc = bpf_perf_link_dealloc, .fill_link_info = bpf_perf_link_fill_link_info, .show_fdinfo = bpf_perf_link_show_fdinfo,