From 40cfa2bce2cf09160da6b767603e11a2cfac3a3e Mon Sep 17 00:00:00 2001 From: guanglei Date: Thu, 12 Oct 2006 08:29:10 +0000 Subject: * ioscheduler.stp: bugfix to avoid refer to NULL pointer * hookid_defs.stp, ioscheduler.stp, register_event.stp: break the old addevent.ioscheduler.elv_next_request into addevent.ioscheduler.elv_next_request.entry and addevent.ioscheduler.elv_next_request.return. Now log_ioscheduler_tracedata_* will use the variables defined in generic ioscheduler tapset --- tapset/ioscheduler.stp | 61 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 8 deletions(-) (limited to 'tapset/ioscheduler.stp') 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; -- cgit