From 519ed8cf9c0daff75ecb3f435a3efec2087945a6 Mon Sep 17 00:00:00 2001 From: Andrii Nakryiko Date: Fri, 17 Dec 2021 14:19:03 -0800 Subject: [PATCH] libbpf-tools: update biosnoop for libbpf 1.0 Switch to libbpf 1.0 mode and adapt libbpf API usage accordingly. Signed-off-by: Andrii Nakryiko --- libbpf-tools/biosnoop.c | 67 ++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/libbpf-tools/biosnoop.c b/libbpf-tools/biosnoop.c index bbca68ce..e983de93 100644 --- a/libbpf-tools/biosnoop.c +++ b/libbpf-tools/biosnoop.c @@ -191,7 +191,6 @@ int main(int argc, char **argv) .parser = parse_arg, .doc = argp_program_doc, }; - struct perf_buffer_opts pb_opts; struct perf_buffer *pb = NULL; struct ksyms *ksyms = NULL; struct biosnoop_bpf *obj; @@ -204,14 +203,9 @@ int main(int argc, char **argv) if (err) return err; + libbpf_set_strict_mode(LIBBPF_STRICT_ALL); libbpf_set_print(libbpf_print_fn); - err = bump_memlock_rlimit(); - if (err) { - fprintf(stderr, "failed to increase rlimit: %d\n", err); - return 1; - } - obj = biosnoop_bpf__open(); if (!obj) { fprintf(stderr, "failed to open BPF object\n"); @@ -256,64 +250,55 @@ int main(int argc, char **argv) } } - obj->links.blk_account_io_start = - bpf_program__attach(obj->progs.blk_account_io_start); - err = libbpf_get_error(obj->links.blk_account_io_start); - if (err) { + obj->links.blk_account_io_start = bpf_program__attach(obj->progs.blk_account_io_start); + if (!obj->links.blk_account_io_start) { + err = -errno; fprintf(stderr, "failed to attach blk_account_io_start: %s\n", - strerror(err)); + strerror(-err)); goto cleanup; } ksyms = ksyms__load(); if (!ksyms) { + err = -ENOMEM; fprintf(stderr, "failed to load kallsyms\n"); goto cleanup; } if (ksyms__get_symbol(ksyms, "blk_account_io_merge_bio")) { obj->links.blk_account_io_merge_bio = bpf_program__attach(obj->progs.blk_account_io_merge_bio); - err = libbpf_get_error(obj->links.blk_account_io_merge_bio); - if (err) { - fprintf(stderr, "failed to attach " - "blk_account_io_merge_bio: %s\n", - strerror(err)); + if (!obj->links.blk_account_io_merge_bio) { + err = -errno; + fprintf(stderr, "failed to attach blk_account_io_merge_bio: %s\n", + strerror(-err)); goto cleanup; } } if (env.queued) { obj->links.block_rq_insert = bpf_program__attach(obj->progs.block_rq_insert); - err = libbpf_get_error(obj->links.block_rq_insert); - if (err) { - fprintf(stderr, "failed to attach block_rq_insert: %s\n", - strerror(err)); + if (!obj->links.block_rq_insert) { + err = -errno; + fprintf(stderr, "failed to attach block_rq_insert: %s\n", strerror(-err)); goto cleanup; } } - obj->links.block_rq_issue = - bpf_program__attach(obj->progs.block_rq_issue); - err = libbpf_get_error(obj->links.block_rq_issue); - if (err) { - fprintf(stderr, "failed to attach block_rq_issue: %s\n", - strerror(err)); + obj->links.block_rq_issue = bpf_program__attach(obj->progs.block_rq_issue); + if (!obj->links.block_rq_issue) { + err = -errno; + fprintf(stderr, "failed to attach block_rq_issue: %s\n", strerror(-err)); goto cleanup; } - obj->links.block_rq_complete = - bpf_program__attach(obj->progs.block_rq_complete); - err = libbpf_get_error(obj->links.block_rq_complete); - if (err) { - fprintf(stderr, "failed to attach block_rq_complete: %s\n", - strerror(err)); + obj->links.block_rq_complete = bpf_program__attach(obj->progs.block_rq_complete); + if (!obj->links.block_rq_complete) { + err = -errno; + fprintf(stderr, "failed to attach block_rq_complete: %s\n", strerror(-err)); goto cleanup; } - pb_opts.sample_cb = handle_event; - pb_opts.lost_cb = handle_lost_events; pb = perf_buffer__new(bpf_map__fd(obj->maps.events), PERF_BUFFER_PAGES, - &pb_opts); - err = libbpf_get_error(pb); - if (err) { - pb = NULL; + handle_event, handle_lost_events, NULL, NULL); + if (!pb) { + err = -errno; fprintf(stderr, "failed to open perf buffer: %d\n", err); goto cleanup; } @@ -337,8 +322,8 @@ int main(int argc, char **argv) /* main: poll */ while (!exiting) { err = perf_buffer__poll(pb, PERF_POLL_TIMEOUT_MS); - if (err < 0 && errno != EINTR) { - fprintf(stderr, "error polling perf buffer: %s\n", strerror(errno)); + if (err < 0 && err != -EINTR) { + fprintf(stderr, "error polling perf buffer: %s\n", strerror(-err)); goto cleanup; } if (env.duration && get_ktime_ns() > time_end) -- 2.34.1