scope: system-wide
description: The iostat-scsi.stp script provides a breakdown of the number of blks read and written on the various machines's SCSI devices. The script takes one argument which is the number of seconds between reports.
test_support: stap -l module("st").function("st_do_scsi")!,kernel.function("st_do_scsi")
-test_check: stap -p4 iostat-scsi.stp 1
-test_installcheck: stap iostat-scsi.stp 1 -c "sleep 1"
+test_check: stap -g -p4 iostat-scsi.stp 1
+test_installcheck: stap -g iostat-scsi.stp 1 -c "sleep 1"
}
%:
-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