[PATCH bpf-next v3 05/10] bpftool: Output io_uring iterator info

Kumar Kartikeya Dwivedi
2021-12-01T04:24:31Z

Output the sole field related to io_uring iterator (inode of attached
io_uring) so that it can be useful in informational and also debugging
cases (trying to find actual io_uring fd attached to the iterator).

Output:
89: iter prog 262 target_name io_uring_file io_uring_inode 16764
pids test_progs(384)

[
{
"id": 123,
"type": "iter",
"prog_id": 463,
"target_name": "io_uring_buf",
"io_uring_inode": 16871,
"pids": [
{
"pid": 443,
"comm": "test_progs"
}
]
}
]

[
{
"id": 126,
"type": "iter",
"prog_id": 483,
"target_name": "io_uring_file",
"io_uring_inode": 16887,
"pids": [
{
"pid": 448,
"comm": "test_progs"
}
]
}
]

Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
---
tools/bpf/bpftool/link.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
index 2c258db0d352..409ae861b839 100644
--- a/tools/bpf/bpftool/link.c
+++ b/tools/bpf/bpftool/link.c
@@ -86,6 +86,12 @@ static bool is_iter_map_target(const char *target_name)
strcmp(target_name, "bpf_sk_storage_map") == 0;
}

+static bool is_iter_io_uring_target(const char *target_name)
+{
+ return strcmp(target_name, "io_uring_file") == 0 ||
+ strcmp(target_name, "io_uring_buf") == 0;
+}
+
static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)
{
const char *target_name = u64_to_ptr(info->iter.target_name);
@@ -94,6 +100,8 @@ static void show_iter_json(struct bpf_link_info *info, json_writer_t *wtr)

if (is_iter_map_target(target_name))
jsonw_uint_field(wtr, "map_id", info->iter.map.map_id);
+ else if (is_iter_io_uring_target(target_name))
+ jsonw_uint_field(wtr, "io_uring_inode", info->iter.io_uring.inode);
}

static int get_prog_info(int prog_id, struct bpf_prog_info *info)
@@ -204,6 +212,8 @@ static void show_iter_plain(struct bpf_link_info *info)

if (is_iter_map_target(target_name))
printf("map_id %u ", info->iter.map.map_id);
+ else if (is_iter_io_uring_target(target_name))
+ printf("io_uring_inode %llu ", info->iter.io_uring.inode);
}

static int show_link_close_plain(int fd, struct bpf_link_info *info)
--
2.34.1