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
>
next prev parent 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