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/LKET/ioscheduler.stp | 139 +++++++++++++------------------------------- 1 file changed, 41 insertions(+), 98 deletions(-) (limited to 'tapset/LKET/ioscheduler.stp') diff --git a/tapset/LKET/ioscheduler.stp b/tapset/LKET/ioscheduler.stp index d9af8a53..72957b45 100755 --- a/tapset/LKET/ioscheduler.stp +++ b/tapset/LKET/ioscheduler.stp @@ -9,21 +9,41 @@ probe addevent.ioscheduler = addevent.ioscheduler.elv_next_request, addevent.ioscheduler.elv_add_request, addevent.ioscheduler.elv_completed_request -{ -} +{} - -/* when a request is retrieved from request queue */ probe addevent.ioscheduler.elv_next_request - += _addevent.ioscheduler.elv_next_request + = addevent.ioscheduler.elv_next_request.entry, + addevent.ioscheduler.elv_next_request.return +{} + +%{ +#include +#include +%} + +/* when a request is retrieved from request queue */ +probe addevent.ioscheduler.elv_next_request.entry + += _addevent.ioscheduler.elv_next_request.entry { update_record() } -probe _addevent.ioscheduler.elv_next_request +probe _addevent.ioscheduler.elv_next_request.entry = ioscheduler.elv_next_request { - log_ioscheduler_tracedata_elv_next(HOOKID_IOSCHED_NEXT_REQ, $q) + log_ioscheduler_tracedata_elv_next_entry(elevator_name) +} + +probe addevent.ioscheduler.elv_next_request.return + += _addevent.ioscheduler.elv_next_request.return +{ + update_record() +} + +probe _addevent.ioscheduler.elv_next_request.return + = ioscheduler.elv_next_request.return +{ + log_ioscheduler_tracedata_elv_next_return(disk_major, disk_minor, req, req_flags) } @@ -37,7 +57,8 @@ probe addevent.ioscheduler.elv_add_request probe _addevent.ioscheduler.elv_add_request = ioscheduler.elv_add_request { - log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, $q, $rq) + log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, + elevator_name, disk_major, disk_minor, req, req_flags) } /* when a request is completed */ @@ -50,107 +71,29 @@ probe addevent.ioscheduler.elv_completed_request probe _addevent.ioscheduler.elv_completed_request = ioscheduler.elv_completed_request { - log_ioscheduler_tracedata_others(HOOKID_IOSCHED_COMPLETE_REQ, $q, $rq) + log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, + elevator_name, disk_major, disk_minor, req, req_flags) } - -%{ -#include -#include -%} - -/* log the data specific to __elv_add_request and elv_remove_request */ -%( kernel_v >= "2.6.10" %? - -function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long) +function log_ioscheduler_tracedata_others(var_id:long, elv_name:string, major:long, + minor:long, rq:long, flag:long) %{ - struct request *rq = (struct request *)((long)THIS->var_rq); - struct request_queue *q = (struct request_queue *)((long)THIS->var_q); - - /* elevator name|major|minor|request|request_flags */ - - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, - (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor, - (int64_t)((long)rq), (_FMT_)rq->flags); -%} - -%: - -function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long) -%{ - struct request *rq = (struct request *)((long)THIS->var_rq); - struct request_queue *q = (struct request_queue *)((long)THIS->var_q); - /* elevator name|major|minor|request|request_flags */ _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); -%} - -%) + THIS->elv_name, THIS->major, THIS->minor, THIS->rq, THIS->flag); -/* log the data specific to elv_next_request, for kernel == 2.6.9 */ -%( kernel_v >= "2.6.10" %? +%} -/* log the data specific to elv_next_request , for kernel > 2.6.9*/ -function log_ioscheduler_tracedata_elv_next(var_id:long, var:long) +/* log the data specific to elv_next_request */ +function log_ioscheduler_tracedata_elv_next_entry(elv_name:string) %{ - - struct request_queue *q; - struct request *rq; - - q = (struct request_queue *)((long)THIS->var); - - /* If there is a request in the request queue: - elevator name|major|minor|request|req_flags - if there is no request in the request queue: - elevator name|empty|0|0 - */ - - if(list_empty(&(q->queue_head))) { - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, (_FMT_)-1, - (_FMT_)-1, (_FMT_)0, (_FMT_)0); - } else { - rq = list_entry_rq(q->queue_head.next); - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); - } - + _lket_trace(_GROUP_IOSCHED, _HOOKID_IOSCHED_NEXT_REQ_ENTRY, "%0s", THIS->elv_name); %} -%: - -function log_ioscheduler_tracedata_elv_next(var_id:long, var:long) +function log_ioscheduler_tracedata_elv_next_return(major:long, minor:long, req:long, req_flags:long) %{ - - struct request_queue *q; - struct request *rq; - - q = (struct request_queue *)((long)THIS->var); - - /* If there is a request in the request queue: - elevator name|major|minor|request|req_flags - if there is no request in the request queue: - elevator name|empty|0|0 - */ - if(list_empty(&(q->queue_head))) { - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)-1, (_FMT_)-1, - (_FMT_)0, (_FMT_)0); - } else { - rq = list_entry_rq(q->queue_head.next); - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); - } - + _lket_trace(_GROUP_IOSCHED, _HOOKID_IOSCHED_NEXT_REQ_RETURN, "%1b%1b%8b%8b", + THIS->major, THIS->minor, THIS->req, THIS->req_flags); %} -%) -- cgit