use one map instead of two
diff --git a/tools/biosnoop.py b/tools/biosnoop.py
index 1d12f9e..51a8f6a 100755
--- a/tools/biosnoop.py
+++ b/tools/biosnoop.py
@@ -21,12 +21,12 @@
#include <linux/blkdev.h>
struct val_t {
+ u32 pid;
char name[TASK_COMM_LEN];
};
BPF_HASH(start, struct request *);
-BPF_HASH(pidbyreq, struct request *, u32);
-BPF_HASH(commbyreq, struct request *, struct val_t);
+BPF_HASH(infobyreq, struct request *, struct val_t);
// cache PID and comm by-req
int trace_pid_start(struct pt_regs *ctx, struct request *req)
@@ -35,9 +35,9 @@
struct val_t val = {};
pid = bpf_get_current_pid_tgid();
- pidbyreq.update(&req, &pid);
if (bpf_get_current_comm(&val.name, sizeof(val.name)) == 0) {
- commbyreq.update(&req, &val);
+ val.pid = pid;
+ infobyreq.update(&req, &val);
}
return 0;
@@ -74,12 +74,11 @@
// As bpf_trace_prink() is limited to a maximum of 1 string and 2
// integers, we'll use more than one to output the data.
//
- valp = commbyreq.lookup(&req);
- pidp = pidbyreq.lookup(&req);
- if (pidp == 0 || valp == 0) {
+ valp = infobyreq.lookup(&req);
+ if (valp == 0) {
bpf_trace_printk("0 0 ? %d\\n", req->__data_len);
} else {
- bpf_trace_printk("0 %d %s %d\\n", *pidp, valp->name,
+ bpf_trace_printk("0 %d %s %d\\n", valp->pid, valp->name,
req->__data_len);
}
@@ -93,8 +92,7 @@
}
start.delete(&req);
- pidbyreq.delete(&req);
- commbyreq.delete(&req);
+ infobyreq.delete(&req);
return 0;
}