Skip to content

Commit a499181

Browse files
HoyeonRheeekyooo
authored andcommitted
tests/python: fix blk request probes tests
Linux kernel commit f3fa33acca9f ("block: remove the ->rq_disk field in struct request") dropped rq_disk in favor of rq->q->disk. The clang tests still include <linux/blkdev.h> and read rq->rq_disk, which fails on recent kernels. 16: include/linux/blkdev.h:34:8: note: forward declaration of 'struct request' 16: struct request; 16: ^ 16: /virtual/main.c:15:12: error: incomplete definition of type 'struct request' 16: if (!rq->rq_disk || rq->rq_disk->major != 5 || 16: ~~^ Since blk-mq became default in linux 5.x, this commit includes <linux/blk-mq.h> and fetch the disk via rq->q->disk so the tests stay valid on current kernels. Signed-off-by: Hoyeon Lee <hoyeon.lee@suse.com>
1 parent 2232b7e commit a499181

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

tests/python/test_clang.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,11 @@ def test_probe_read_whitelist2(self):
132132
b = BPF(text=text)
133133
fn = b.load_func(b"count_tcp", BPF.KPROBE)
134134

135+
@skipUnless(kernel_version_ge(5,16), "requires kernel >= 5.16")
135136
def test_probe_read_keys(self):
136137
text = b"""
137138
#include <uapi/linux/ptrace.h>
138-
#include <linux/blkdev.h>
139+
#include <linux/blk-mq.h>
139140
BPF_HASH(start, struct request *);
140141
int do_request(struct pt_regs *ctx, struct request *req) {
141142
u64 ts = bpf_ktime_get_ns();
@@ -226,9 +227,10 @@ def test_sscanf_string(self):
226227
self.assertEqual(l.stack[0].name, name)
227228
self.assertEqual(l.stack[0].path, path)
228229

230+
@skipUnless(kernel_version_ge(5,16), "requires kernel >= 5.16")
229231
def test_iosnoop(self):
230232
text = b"""
231-
#include <linux/blkdev.h>
233+
#include <linux/blk-mq.h>
232234
#include <uapi/linux/ptrace.h>
233235
234236
struct key_t {
@@ -315,10 +317,11 @@ def test_nested_probe_read_deref(self):
315317
b = BPF(text=text)
316318
fn = b.load_func(b"test", BPF.KPROBE)
317319

320+
@skipUnless(kernel_version_ge(5,16), "requires kernel >= 5.16")
318321
def test_char_array_probe(self):
319-
BPF(text=b"""#include <linux/blkdev.h>
322+
BPF(text=b"""#include <linux/blk-mq.h>
320323
int kprobe__blk_update_request(struct pt_regs *ctx, struct request *req) {
321-
bpf_trace_printk("%s\\n", req->rq_disk->disk_name);
324+
bpf_trace_printk("%s\\n", req->q->disk->disk_name);
322325
return 0;
323326
}""")
324327

@@ -470,9 +473,10 @@ def test_probe_member_expr(self):
470473
}""")
471474
b.load_func(b"test", BPF.KPROBE)
472475

476+
@skipUnless(kernel_version_ge(5,16), "requires kernel >= 5.16")
473477
def test_unop_probe_read(self):
474478
text = b"""
475-
#include <linux/blkdev.h>
479+
#include <linux/blk-mq.h>
476480
int trace_entry(struct pt_regs *ctx, struct request *req) {
477481
if (!(req->bio->bi_flags & 1))
478482
return 1;
@@ -1294,24 +1298,24 @@ def test_packed_structure(self):
12941298
self.assertEqual(st.a, 10)
12951299
self.assertEqual(st.b, 20)
12961300

1297-
@skipUnless(kernel_version_ge(4,14), "requires kernel >= 4.14")
1301+
@skipUnless(kernel_version_ge(5,17), "requires kernel >= 5.17")
12981302
def test_jump_table(self):
12991303
text = b"""
13001304
#include <linux/blk_types.h>
1301-
#include <linux/blkdev.h>
1305+
#include <linux/blk-mq.h>
13021306
#include <linux/time64.h>
13031307
13041308
BPF_PERCPU_ARRAY(rwdf_100ms, u64, 400);
13051309
13061310
int do_request(struct pt_regs *ctx, struct request *rq) {
13071311
u32 cmd_flags;
13081312
u64 base, dur, slot, now = 100000;
1313+
struct gendisk *disk = rq->q->disk;
13091314
13101315
if (!rq->start_time_ns)
13111316
return 0;
13121317
1313-
if (!rq->rq_disk || rq->rq_disk->major != 5 ||
1314-
rq->rq_disk->first_minor != 6)
1318+
if (!disk || disk->major != 5 || disk->first_minor != 6)
13151319
return 0;
13161320
13171321
cmd_flags = rq->cmd_flags;

0 commit comments

Comments
 (0)