diff options
Diffstat (limited to 'testsuite/systemtap.examples/io/iostat-scsi.stp')
-rwxr-xr-x | testsuite/systemtap.examples/io/iostat-scsi.stp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/testsuite/systemtap.examples/io/iostat-scsi.stp b/testsuite/systemtap.examples/io/iostat-scsi.stp index 8251741d..f6715a42 100755 --- a/testsuite/systemtap.examples/io/iostat-scsi.stp +++ b/testsuite/systemtap.examples/io/iostat-scsi.stp @@ -20,14 +20,28 @@ probe module("sd_mod").function("sd_init_command") !, kernel.function("sd_init_c } %: -function get_sector_size:long (data:long) { /* pure */ +function get_sector_size:long (data:long) { return @cast(data, "scsi_device", "kernel<scsi/scsi_device.h>")->sector_size } +%(kernel_v>="2.6.31" %? +%{ +#include <linux/blkdev.h> +%} + +function get_nr_sectors:long(rq:long) %{ /* pure */ + THIS->__retvalue = blk_rq_sectors((const struct request *)(long)THIS->rq); +%} +%) + probe module("sd_mod").function("sd_prep_fn") !, kernel.function("sd_prep_fn") { device=kernel_string($rq->rq_disk->disk_name) sector_size=get_sector_size($q->queuedata) +%(kernel_v>="2.6.31" %? + nr_sectors=get_nr_sectors($rq) +%: nr_sectors=$rq->nr_sectors +%) devices[device] = 1 if ($rq->cmd_flags & 1) writes[device] <<< nr_sectors * sector_size |