This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: per-entity statistics
Jose R. Santos wrote:
Unless you only have a single SCSI card with just one channel, just
getting the LUN is not enough. You need the SCSI host number, channel,
lun, and ID. Here is a bit of code from the trace tool that shows how to
get that information using SystemTap.
function log_scsi_iodone_extra(var:long)
%{
struct scsi_cmnd *cmd = (struct scsi_cmnd *)((long)THIS->var);
long long scsi_info;
scsi_info = ((cmd->device->host->host_no & 0xFF) << 24) |
((cmd->device->channel & 0xFF) << 16) |
((cmd->device->lun & 0xFF) << 8) |
(cmd->device->id & 0xFF);
Well, it is obvious why you have masked, shifted and or'ed
thoses numbers. But one might get easily in trouble doing this.
Think about storage area networks and lots of devices being
attached to a single Linux. For now this code works in
most environments because the Linux SCSI stack does its
own compact LUN enumeration. But it's not airtight.
Martin