diff options
Diffstat (limited to 'tapset/ioscheduler.stp')
-rw-r--r-- | tapset/ioscheduler.stp | 61 |
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; |