// IO scheduler tapset // Copyright (C) 2005, 2006 IBM Corp. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. %{ #include #include %} /* when a request is retrieved from request queue */ probe ioscheduler.elv_next_request = kernel.function("elv_next_request") { %( kernel_v >= "2.6.10" %? elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) %: elevator_name = kernel_string($q->elevator->elevator_name) %) disk_major = disk_major_from_request($q) disk_minor = disk_minor_from_request($q) } /* when a request is added to the request queue */ probe ioscheduler.elv_add_request = kernel.function("__elv_add_request") { %( kernel_v >= "2.6.10" %? elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) %: elevator_name = kernel_string($q->elevator->elevator_name) %) disk_major = $rq->rq_disk->major disk_minor = $rq->rq_disk->first_minor } /* when a request is completed */ probe ioscheduler.elv_completed_request = kernel.function("elv_completed_request") { %( kernel_v >= "2.6.10" %? elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) %: elevator_name = kernel_string($q->elevator->elevator_name) %) disk_major = $rq->rq_disk->major disk_minor = $rq->rq_disk->first_minor } function disk_major_from_request:long(var_q:long) %{ struct request_queue *q; struct request *rq; q = (struct request_queue *)((long)THIS->var_q); if(list_empty(&(q->queue_head))) THIS->__retvalue = -1; else { rq = list_entry_rq(q->queue_head.next); THIS->__retvalue = rq->rq_disk->first_minor; } %} function disk_minor_from_request:long(var_q:long) %{ struct request_queue *q; struct request *rq; q = (struct request_queue *)((long)THIS->var_q); if(list_empty(&(q->queue_head))) THIS->__retvalue = -1; else { rq = list_entry_rq(q->queue_head.next); THIS->__retvalue = rq->rq_disk->first_minor; } %}