public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Ric Wheeler <rwheeler@redhat.com>
To: Grant Grundler <grundler@google.com>
Cc: Jonathan Nell <crtrn13@gmail.com>, linux-scsi@vger.kernel.org
Subject: Re: scsi traffic sniffing
Date: Tue, 01 Sep 2009 12:57:51 -0400	[thread overview]
Message-ID: <4A9D528F.3090903@redhat.com> (raw)
In-Reply-To: <da824cf30909010948p65d54d8cr744a4b1082f720c3@mail.gmail.com>

On 09/01/2009 12:48 PM, Grant Grundler wrote:
> +linux-scsi
>
> On Tue, Sep 1, 2009 at 9:17 AM, Jonathan Nell<crtrn13@gmail.com>  wrote:
>    
>> 2009/9/1 Grant Grundler<grundler@google.com>:
>>      
>>> The ideal tool is a protocol analyzer for whatever transport the SCSI
>>> device is attached to.
>>> Here's the slide deck from a talk I once gave at OLS outlining the HW
>>> debug tools:
>>>     http://iou.parisc-linux.org/ols_2001/slides/generated/
>>>
>>> (and "SCSI" in that slide deck often means Parallel SCSI transport.)
>>>
>>> Using the scsi_logging hooks described by Stefan Richter are often enough
>>> to understand where in the process something is failing.
>>>
>>> hth,
>>> grant
>>>
>>>        
>> Unfortunately I need a data dump as well so the scsi_logging hooks
>> aren't going to do the job I believe.
>>      
> IMHO, if a data dump is needed, a logic analyzer is probably the right tool.
> Which transport is being used here?
>
> Folks might have suggestions on tools that are available. Often those can
> be rented for a few days/week at a time.
>    

You can get specific analyzers for storage protocols (Fibre channel, 
s-ata, SAS, etc). They can be pricey (especially if you need to monitor 
multiple devices with a multi-port analyzer)

ric

>
>    
>> My next though was to wrap the
>> SG_IO ioctl call (i.e. trap it in the kernel) and have that dump the
>> data from (struct sg_io_hdr).dxferp. (The ioctl sniffer would be
>> useful anyway for other things).
>>      
> The drawback here is it only tells you what data is being handed to
> the interface card, not what data is sent to the device or how it is
> sent exactly (framing, timing, etc).
>
>
>    
>> Having issues with doing the kernel trap in the newer kernel versions
>> though (trying on 2.6.30). The syscall table is now read-only but for
>> some reason my set_memory_rw() call is failing... Any ideas how to do
>> this properly?
>>      
> Nope, sorry. At least not offhand.
>
> cheers,
> grant
>
>    
>> Here are the relevant bits of code:
>>
>> unsigned long **find_sys_call_table(void)
>> {
>>    unsigned long **sctable;
>>    unsigned long ptr;
>>
>>    sctable = NULL;
>>    for (ptr = (unsigned long)&unlock_kernel;
>>         ptr<  (unsigned long)&loops_per_jiffy;
>>         ptr += sizeof(void *))
>>    {
>>       unsigned long *p;
>>       p = (unsigned long *)ptr;
>>       if (p[__NR_close] == (unsigned long) sys_close)
>>       {
>>          sctable = (unsigned long **)p;
>>          return&sctable[0];
>>       }
>>    }
>>    return NULL;
>> }
>>
>> static int __init scsisniff_init_module(void)
>> {
>>         if ( (sys_call_table = find_sys_call_table()) ) {
>>             real_ioctl = (int(*)(unsigned int fd, unsigned int cmd,
>> unsigned long arg))sys_call_table[__NR_ioctl];
>>
>>                 if ( set_memory_rw( (unsigned
>> long)sys_call_table[__NR_ioctl], 1 ) )
>>                         printk( "set_memory_rw: succeeded\n" );
>>                 else {
>>                         printk( "set_memory_rw: failed!\n" );
>>                       return -1;
>>                 }
>>
>>                 sys_call_table[__NR_ioctl] = (unsigned long)my_ioctl;
>>         }
>>         else {
>>                 return -1;
>>         }
>>       return 0;
>> }
>>
>> This gives me a lovely OOPS:
>>
>> [   71.143742] WARNING: at arch/x86/mm/pageattr.c:833
>> change_page_attr_set_clr+0x1a0/0x400()
>> [   71.143745] Modules linked in: scsi_sniff(+) i915 binfmt_misc drm
>> i2c_algo_bit bridge stp bnep lp snd_hda_codec_analog snd_hda_intel
>> snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm
>> snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event
>> snd_seq snd_timer snd_seq_device video snd psmouse tpm_infineon tpm
>> ppdev soundcore serio_raw pcspkr intel_agp tpm_bios output heci(C)
>> iTCO_wdt iTCO_vendor_support parport_pc parport snd_page_alloc floppy
>> usbhid usb_storage e1000e
>> [   71.143768] Pid: 3378, comm: insmod Tainted: G         C
>> 2.6.30.4custom-1.0 #6
>> [   71.143769] Call Trace:
>> [   71.143773]  [<ffffffff802da6d5>] ? __vunmap+0xc5/0x110
>> [   71.143775]  [<ffffffff80235200>] ? change_page_attr_set_clr+0x1a0/0x400
>> [   71.143778]  [<ffffffff8024edf8>] warn_slowpath_common+0x78/0xd0
>> [   71.143780]  [<ffffffff8024ee5f>] warn_slowpath_null+0xf/0x20
>> [   71.143783]  [<ffffffff80235200>] change_page_attr_set_clr+0x1a0/0x400
>> [   71.143785]  [<ffffffffa0274050>] ? my_ioctl+0x0/0x120 [scsi_sniff]
>> [   71.143789]  [<ffffffff802a6dcd>] ? marker_update_probe_range+0x1dd/0x2d0
>> [   71.143791]  [<ffffffffa0277000>] ? scsisniff_init_module+0x0/0xf4
>> [scsi_sniff]
>> [   71.143793]  [<ffffffff80235b9a>] set_memory_rw+0x2a/0x30
>> [   71.143796]  [<ffffffff802ff000>] ? sys_fcntl+0x180/0x420
>> [   71.143798]  [<ffffffffa02770bb>] scsisniff_init_module+0xbb/0xf4
>> [scsi_sniff]
>> [   71.143801]  [<ffffffff8020a04c>] do_one_initcall+0x3c/0x180
>> [   71.143804]  [<ffffffff8026b7f3>] ? __blocking_notifier_call_chain+0x63/0x80
>> [   71.143807]  [<ffffffff8027dc0d>] sys_init_module+0xad/0x200
>> [   71.143810]  [<ffffffff80210fc2>] system_call_fastpath+0x16/0x1b
>> [   71.143812] ---[ end trace 5b3efe312296b587 ]---
>> [   71.143958] set_memory_rw: failed!
>>
>>      
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>    


  reply	other threads:[~2009-09-01 16:56 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <48e952f40908312312w7765c2a1q3a4f022967735288@mail.gmail.com>
     [not found] ` <48e952f40908312313u75e4d00cr3d934f1dbdd1cca9@mail.gmail.com>
2009-09-01  6:13   ` scsi traffic sniffing Jonathan Nell
2009-09-01 10:40     ` 谢纲
2009-09-01 11:19       ` Stefan Richter
2009-09-02  3:12       ` 谢纲
2009-09-02  4:20         ` Jonathan Nell
2009-09-02  4:49           ` 谢纲
2009-09-02  6:48             ` Jonathan Nell
2009-09-02  7:21               ` Xie Gang
2009-09-02  7:50                 ` Jonathan Nell
2009-09-02  8:03                   ` Xie Gang
2009-09-02 12:05                     ` Jonathan Nell
2009-09-01 16:06     ` Grant Grundler
     [not found]       ` <48e952f40909010917n7590d364sc4a16317d5e7fb0a@mail.gmail.com>
2009-09-01 16:48         ` Grant Grundler
2009-09-01 16:57           ` Ric Wheeler [this message]
2009-09-01 17:13     ` Bart Van Assche

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A9D528F.3090903@redhat.com \
    --to=rwheeler@redhat.com \
    --cc=crtrn13@gmail.com \
    --cc=grundler@google.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox