]> sourceware.org Git - systemtap.git/commitdiff
Fix PR16540 by adding scsi tracepoint support to the scsi.iodone probe alias.
authorDavid Smith <dsmith@redhat.com>
Mon, 10 Feb 2014 15:59:21 +0000 (09:59 -0600)
committerDavid Smith <dsmith@redhat.com>
Mon, 10 Feb 2014 15:59:21 +0000 (09:59 -0600)
* tapset/linux/scsi.stp (scsi.iodone): Use the "scsi_dispatch_cmd_done"
  tracepoint when available.

tapset/linux/scsi.stp

index b8f0c2cc270bf9432567ad18eebfaa303bfad69d..15b2d3ae726262ec75b6e91f81ed4e98ee879454 100644 (file)
@@ -126,15 +126,19 @@ probe scsi.iodispatching
  * @scsi_timer_pending: 1 if a timer is pending on this request
  */
 probe scsi.iodone
-       = module("scsi_mod").function("scsi_done@drivers/scsi/scsi.c")!,
+       = kernel.trace("scsi_dispatch_cmd_done")!,
+         module("scsi_mod").function("scsi_done@drivers/scsi/scsi.c")!,
          kernel.function("scsi_done@drivers/scsi/scsi.c")?
 
 {
-       host_no = $cmd->device->host->host_no
-       channel = $cmd->device->channel
-       lun = $cmd->device->lun
-       dev_id = $cmd->device->id
-       device_state = $cmd->device->sdev_state
+       # Why is the @cast() needed here? When the probe alias uses
+       # the "scsi_dispatch_cmd_done" tracepoint, the type info isn't
+       # in scope. 
+       host_no = @cast($cmd->device, "scsi_device")->host->host_no
+       channel = @cast($cmd->device, "scsi_device")->channel
+       lun = @cast($cmd->device, "scsi_device")->lun
+       dev_id = @cast($cmd->device, "scsi_device")->id
+       device_state = @cast($cmd->device, "scsi_device")->sdev_state
        device_state_str = describe_device_state(device_state)
        data_direction = $cmd->sc_data_direction
        data_direction_str = describe_data_direction(data_direction)
This page took 0.03057 seconds and 5 git commands to generate.