Skip to content

Commit

Permalink
libbpf-tools: update biosnoop for libbpf 1.0
Browse files Browse the repository at this point in the history
Switch to libbpf 1.0 mode and adapt libbpf API usage accordingly.

Signed-off-by: Andrii Nakryiko <[email protected]>
  • Loading branch information
anakryiko committed Dec 20, 2021
1 parent c5b17e6 commit 519ed8c
Showing 1 changed file with 26 additions and 41 deletions.
67 changes: 26 additions & 41 deletions libbpf-tools/biosnoop.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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");
Expand Down Expand Up @@ -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;
}
Expand All @@ -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)
Expand Down

0 comments on commit 519ed8c

Please sign in to comment.