= 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 <linux/blkdev.h>
+#include <linux/elevator.h>
+%}
+
+/* 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)
}
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 */
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 <linux/blkdev.h>
-#include <linux/elevator.h>
-%}
-
-/* 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);
%}
-%)