.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;
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");
}
}
- 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;
}
/* 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)