From f4bdc266c78bba610a2fb735494472589df7dfda Mon Sep 17 00:00:00 2001 From: Hengqi Chen Date: Sat, 11 Dec 2021 16:27:11 +0800 Subject: [PATCH] libbpf-tools: Fix cachestat with kernel 5.15 The tool cachestat is broken on kernel 5.15 due to kernel function renaming. Fix the tool by detecting symbol existence. See #3687 and Signed-off-by: Hengqi Chen --- libbpf-tools/cachestat.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/libbpf-tools/cachestat.c b/libbpf-tools/cachestat.c index 05785251328e..453eabfcab46 100644 --- a/libbpf-tools/cachestat.c +++ b/libbpf-tools/cachestat.c @@ -144,10 +144,29 @@ int main(int argc, char **argv) obj = cachestat_bpf__open_and_load(); if (!obj) { - fprintf(stderr, "failed to open and/or load BPF object\n"); + fprintf(stderr, "failed to open BPF object\n"); return 1; } + /** + * account_page_dirtied was renamed to folio_account_dirtied + * in kernel commit 203a31516616 ("mm/writeback: Add __folio_mark_dirty()") + */ + if (fentry_exists("folio_account_dirtied", NULL)) { + err = bpf_program__set_attach_target(obj->progs.account_page_dirtied, 0, + "folio_account_dirtied"); + if (err) { + fprintf(stderr, "failed to set attach target\n"); + goto cleanup; + } + } + + err = cachestat_bpf__load(obj); + if (err) { + fprintf(stderr, "failed to load BPF object\n"); + goto cleanup; + } + if (!obj->bss) { fprintf(stderr, "Memory-mapping BPF maps is supported starting from Linux 5.7, please upgrade.\n"); goto cleanup;