diff options
Diffstat (limited to 'tapset/ioscheduler.stp')
-rw-r--r-- | tapset/ioscheduler.stp | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/tapset/ioscheduler.stp b/tapset/ioscheduler.stp index ba732b65..49be6217 100644 --- a/tapset/ioscheduler.stp +++ b/tapset/ioscheduler.stp @@ -109,30 +109,30 @@ probe ioscheduler.elv_completed_request function disk_major_from_request:long(var_q:long) %{ /* pure */ - struct request_queue *q; - struct request *rq; + struct request_queue *q = (struct request_queue *)((long)THIS->var_q); + struct list_head *queue_head = &(q->queue_head); - q = (struct request_queue *)((long)THIS->var_q); - - if(list_empty(&(q->queue_head))) + if (list_empty(&(q->queue_head))) /* FIXME: deref hazard! */ THIS->__retvalue = -1; else { - rq = list_entry_rq(q->queue_head.next); - THIS->__retvalue = rq->rq_disk->first_minor; + struct request *rq = list_entry_rq(q->queue_head.next); /* FIXME: deref hazard! */ + struct gendisk *rq_disk = kread(&(rq->rq_disk)); + THIS->__retvalue = kread(&(rq_disk->major)); } + CATCH_DEREF_FAULT(); %} function disk_minor_from_request:long(var_q:long) %{ /* pure */ - struct request_queue *q; - struct request *rq; - - q = (struct request_queue *)((long)THIS->var_q); + struct request_queue *q = (struct request_queue *)((long)THIS->var_q); + struct list_head *queue_head = &(q->queue_head); - if(list_empty(&(q->queue_head))) + if (list_empty(&(q->queue_head))) /* FIXME: deref hazard! */ THIS->__retvalue = -1; else { - rq = list_entry_rq(q->queue_head.next); - THIS->__retvalue = rq->rq_disk->first_minor; + struct request *rq = list_entry_rq(q->queue_head.next); /* FIXME: deref hazard! */ + struct gendisk *rq_disk = kread(&(rq->rq_disk)); + THIS->__retvalue = kread(&(rq_disk->first_minor)); } + CATCH_DEREF_FAULT(); %} |