commit 093b972294256b3ad68712daecdfdc5da1418a13 Author: Martin Cermak Date: Mon May 9 20:00:15 2022 +0200 refix PR28634 for rhel8+ kernels The rhel kernel backports do not always align to upstream, so that the KERNEL_VERSION() based gate needs to be updated using a version that does the expected thing for the rhel{7,8,9} kernels. diff --git a/tapset/linux/ioscheduler.stp b/tapset/linux/ioscheduler.stp index 3096a73ea..c7231878d 100644 --- a/tapset/linux/ioscheduler.stp +++ b/tapset/linux/ioscheduler.stp @@ -11,7 +11,7 @@ // %{ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(5,16,0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,18,0) #include #endif %} @@ -41,7 +41,7 @@ probe ioscheduler.elv_next_request = kernel.function("blk_peek_request") !, */ probe ioscheduler.elv_next_request.return = kernel.function("blk_peek_request").return !, - kernel.function("elv_next_request").return + kernel.function("elv_next_request").return ? { name = "elv_next_request" if ($return == 0) { @@ -80,18 +80,14 @@ probe ioscheduler.elv_completed_request @choose_defined($q->elevator->elevator_type->elevator_name, @choose_defined($q->elevator->elevator_name, 0))), "") - if($rq == 0) { - disk_major = -1 - disk_minor = -1 - } else { - if($rq->rq_disk == 0) { - disk_major = -1 - disk_minor = -1 - } else { - disk_major = $rq->rq_disk->major - disk_minor = $rq->rq_disk->first_minor - } - } + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { + disk_major = $rq->rq_disk->major + disk_minor = $rq->rq_disk->first_minor + } rq = $rq rq_flags = ($rq == 0) ? 0 @@ -111,7 +107,7 @@ probe ioscheduler.elv_completed_request // when a request is added to the request queue probe ioscheduler.elv_add_request.kp = kernel.function("elv_insert") !, - kernel.function("__elv_add_request") + kernel.function("__elv_add_request") ? { name = "elv_add_request" elevator_name = kernel_string( @@ -120,18 +116,15 @@ probe ioscheduler.elv_add_request.kp = @choose_defined($q->elevator->elevator_name, 0))), "") q = $q - if($rq == 0) { - disk_major = -1 - disk_minor = -1 - } else { - if($rq->rq_disk == 0) { - disk_major = -1 - disk_minor = -1 - } else { - disk_major = $rq->rq_disk->major - disk_minor = $rq->rq_disk->first_minor - } - } + + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { + disk_major = $rq->rq_disk->major + disk_minor = $rq->rq_disk->first_minor + } rq = $rq rq_flags = ($rq == 0) ? 0 @@ -160,11 +153,11 @@ probe ioscheduler.elv_add_request.tp = kernel.trace("block_rq_insert") ? 0))), "") rq = $rq - if ($rq == 0 || $rq->rq_disk ==0) { - disk_major = -1 - disk_minor = -1 - } - else { + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { disk_major = $rq->rq_disk->major disk_minor = $rq->rq_disk->first_minor } @@ -184,7 +177,7 @@ probe ioscheduler.elv_add_request.tp = kernel.trace("block_rq_insert") ? * */ probe ioscheduler.elv_add_request = - ioscheduler.elv_add_request.tp !, ioscheduler.elv_add_request.kp + ioscheduler.elv_add_request.tp !, ioscheduler.elv_add_request.kp ? {} /** @@ -211,14 +204,14 @@ probe ioscheduler_trace.elv_completed_request rq = $rq - if ($rq == 0 || $rq->rq_disk ==0) { - disk_major = -1 - disk_minor = -1 - } - else { - disk_major = $rq->rq_disk->major - disk_minor = $rq->rq_disk->first_minor - } + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { + disk_major = $rq->rq_disk->major + disk_minor = $rq->rq_disk->first_minor + } rq_flags = ($rq == 0) ? 0 : @choose_defined($rq->cmd_flags, $rq->flags) @@ -247,14 +240,14 @@ probe ioscheduler_trace.elv_issue_request 0))), "") rq = $rq - if ($rq == 0 || $rq->rq_disk ==0) { - disk_major = -1 - disk_minor = -1 - } - else { + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { disk_major = $rq->rq_disk->major disk_minor = $rq->rq_disk->first_minor - } + } rq_flags = ($rq == 0) ? 0 : @choose_defined($rq->cmd_flags, $rq->flags) @@ -283,14 +276,14 @@ probe ioscheduler_trace.elv_requeue_request 0))), "") rq = $rq - if ($rq == 0 || $rq->rq_disk ==0) { - disk_major = -1 - disk_minor = -1 - } - else { - disk_major = $rq->rq_disk->major - disk_minor = $rq->rq_disk->first_minor - } + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { + disk_major = $rq->rq_disk->major + disk_minor = $rq->rq_disk->first_minor + } rq_flags = ($rq == 0) ? 0 : @choose_defined($rq->cmd_flags, $rq->flags) @@ -318,14 +311,14 @@ probe ioscheduler_trace.elv_abort_request 0))), "") rq = $rq - if ($rq == 0 || $rq->rq_disk ==0) { - disk_major = -1 - disk_minor = -1 - } - else { - disk_major = $rq->rq_disk->major - disk_minor = $rq->rq_disk->first_minor - } + disk_major = -1 + disk_minor = -1 + // kernel f3fa33acca9f0058157214800f68b10d8e71ab7a + // block: remove the ->rq_disk field in struct request + if(@defined($rq->rq_disk) && ($rq->rq_disk != 0)) { + disk_major = $rq->rq_disk->major + disk_minor = $rq->rq_disk->first_minor + } rq_flags = ($rq == 0) ? 0 : @choose_defined($rq->cmd_flags, $rq->flags) diff --git a/testsuite/buildok/ioscheduler-all-probes.stp b/testsuite/buildok/ioscheduler-all-probes.stp index da182c774..a8d8e08c5 100755 --- a/testsuite/buildok/ioscheduler-all-probes.stp +++ b/testsuite/buildok/ioscheduler-all-probes.stp @@ -2,6 +2,6 @@ // Tests if all probes in the ioscheduler tapset are resolvable. -probe ioscheduler.*, ioscheduler.*.return {} +probe ioscheduler.* ?, ioscheduler.*.return ? {} probe ioscheduler_trace.* ? {} diff --git a/testsuite/buildok/ioscheduler-detailed.stp b/testsuite/buildok/ioscheduler-detailed.stp index 143f20cd6..033e955dc 100755 --- a/testsuite/buildok/ioscheduler-detailed.stp +++ b/testsuite/buildok/ioscheduler-detailed.stp @@ -6,24 +6,24 @@ # test the kprobes aliases (*.kp). This could cause them to get out # of sync with the kprobed functions. So, we test them explicitly. -probe ioscheduler.elv_next_request +probe ioscheduler.elv_next_request ? { printf("%s: %s\n", name, elevator_name) } -probe ioscheduler.elv_next_request.return +probe ioscheduler.elv_next_request.return ? { printf("name: %s, %d, %d, %p, %d", name, disk_major, disk_minor, rq, rq_flags) } -probe ioscheduler.elv_completed_request +probe ioscheduler.elv_completed_request ? { printf("name: %s, elv_name: %s, %d, %d, %p, %d", name, elevator_name, disk_major, disk_minor, rq, rq_flags) } -probe ioscheduler.elv_add_request, - ioscheduler.elv_add_request.kp, +probe ioscheduler.elv_add_request ?, + ioscheduler.elv_add_request.kp ?, ioscheduler.elv_add_request.tp ? { printf("name: %s, elv_name: %s, %d, %d, %p, %d", name, elevator_name,