summaryrefslogtreecommitdiffstats
path: root/tapset/ioscheduler.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/ioscheduler.stp')
-rw-r--r--tapset/ioscheduler.stp61
1 files changed, 53 insertions, 8 deletions
diff --git a/tapset/ioscheduler.stp b/tapset/ioscheduler.stp
index 9fa0cca1..9c3714f4 100644
--- a/tapset/ioscheduler.stp
+++ b/tapset/ioscheduler.stp
@@ -20,8 +20,27 @@ probe ioscheduler.elv_next_request
%:
elevator_name = kernel_string($q->elevator->elevator_name)
%)
- disk_major = disk_major_from_request($q)
- disk_minor = disk_minor_from_request($q)
+}
+
+probe ioscheduler.elv_next_request.return
+ = kernel.function("elv_next_request").return
+{
+ if($return == 0) {
+ req = 0
+ req_flags = 0
+ disk_major = -1
+ disk_minor = -1
+ } else {
+ req = $return
+ req_flags = $return->flags
+ if($return->rq_disk == 0) {
+ disk_major = -1
+ disk_minor = -1
+ } else {
+ disk_major = $return->rq_disk->major
+ disk_minor = $return->rq_disk->first_minor
+ }
+ }
}
/* when a request is added to the request queue */
@@ -33,8 +52,21 @@ probe ioscheduler.elv_add_request
%:
elevator_name = kernel_string($q->elevator->elevator_name)
%)
- disk_major = $rq->rq_disk->major
- disk_minor = $rq->rq_disk->first_minor
+ 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
+ }
+ }
+
+ req = $rq
+ req_flags = $rq->flags
}
/* when a request is completed */
@@ -46,12 +78,25 @@ probe ioscheduler.elv_completed_request
%:
elevator_name = kernel_string($q->elevator->elevator_name)
%)
- disk_major = $rq->rq_disk->major
- disk_minor = $rq->rq_disk->first_minor
+ 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
+ }
+ }
+
+ req = $rq
+ req_flags = $rq->flags
}
function disk_major_from_request:long(var_q:long)
-%{
+%{ /* pure */
struct request_queue *q;
struct request *rq;
@@ -66,7 +111,7 @@ function disk_major_from_request:long(var_q:long)
%}
function disk_minor_from_request:long(var_q:long)
-%{
+%{ /* pure */
struct request_queue *q;
struct request *rq;