From 1f8d7234626ed24608c0b2ef94293832552dfa98 Mon Sep 17 00:00:00 2001 From: li-long315 Date: Mon, 26 Jun 2023 17:41:24 +0800 Subject: [PATCH] fetch necessary BTF for CO-RE and open attach load BPF procedure --- observation/src/vfsstat/vfsstat.c | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/observation/src/vfsstat/vfsstat.c b/observation/src/vfsstat/vfsstat.c index 87d31053..bc2e6328 100644 --- a/observation/src/vfsstat/vfsstat.c +++ b/observation/src/vfsstat/vfsstat.c @@ -80,5 +80,42 @@ int main(int argc, char *argv[]) libbpf_set_print(libbpf_print_fn); + err = ensure_core_btf(&open_opts); + if (err) { + warning("Failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err)); + return 1; + } + + skel = vfsstat_bpf__open(); + if (!skel) { + warning("Failed to open BPF objects\n"); + goto cleanup; + } + + /* It fallbacks to kprobes when kernel does not support fentry. */ + if (fentry_can_attach("vfs_read", NULL)) { + bpf_program__set_autoload(skel->progs.kprobe_vfs_read, false); + bpf_program__set_autoload(skel->progs.kprobe_vfs_write, false); + bpf_program__set_autoload(skel->progs.kprobe_vfs_fsync, false); + bpf_program__set_autoload(skel->progs.kprobe_vfs_open, false); + bpf_program__set_autoload(skel->progs.kprobe_vfs_create, false); + } else { + bpf_program__set_autoload(skel->progs.fentry_vfs_read, false); + bpf_program__set_autoload(skel->progs.fentry_vfs_write, false); + bpf_program__set_autoload(skel->progs.fentry_vfs_fsync, false); + bpf_program__set_autoload(skel->progs.fentry_vfs_open, false); + bpf_program__set_autoload(skel->progs.fentry_vfs_create, false); + } + + err = vfsstat_bpf__load(skel); + if (err) { + warning("Failed to load BPF skelect: %d\n", err); + goto cleanup; + } + +cleanup: + vfsstat_bpf__destroy(skel); + cleanup_core_btf(&open_opts); + return err != 0; } -- Gitee