Date: Wed, 15 Apr 2015 18:31:01 -0700 From: Lacey Powers <lacey.leanne@gmail.com> To: Eric Badger <eric.badger@compellent.com>, "freebsd-dtrace@freebsd.org" <freebsd-dtrace@freebsd.org> Subject: Re: io:kernel::done invalid address (0x0) in predicate on FreeBSD 10.1 Message-ID: <552F10D5.3090204@gmail.com> In-Reply-To: <552EC7A3.7050508@compellent.com> References: <552EB6A4.4070406@gmail.com> <552EC7A3.7050508@compellent.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 04/15/2015 01:18 PM, Eric Badger wrote: > > On 04/15/15 14:06, Lacey Powers wrote: >> Hello Everyone, >> >> I was trying to port a script from Illumos to FreeBSD 10.1, from this >> blog post, here: >> >> http://dtrace.org/blogs/ahl/2014/08/31/openzfs-tuning/ >> >> The rw.d script specifically. I wished to use it forsome ZFS tuning and >> testing I have been doing on my workstation. >> >> Here is the script I came up with: >> >> https://gist.github.com/kassandry/219596d7f17e5b128e68 >> >> The version I have mostly seems to work, aside from a single error, >> repeated a very large number of times during a run.=( >> >> Example: >> >> dtrace: error on enabled probe ID 3 (ID 58515: io:kernel::done): invalid >> address (0x0) in predicate at DIF offset 60 >> dtrace: error on enabled probe ID 3 (ID 58515: io:kernel::done): invalid >> address (0x0) in predicate at DIF offset 60 >> >> Despite adding >> >> args[0] != NULL >> >> to the predicate for io:::done, it still comes up. > > I can't claim expertise here, but it seems that the 'io:::done' probe > can receive a 'struct bio' where 'bio_disk' is NULL. So a first > thought would be to have a predicate like: > > /args[0] && args[0]->bio_disk && ts[...]/ > > I don't know under what circumstances bio_disk is NULL; would require > some digging to find out. Someone more familiar with this area may > have a better suggestion. > > Eric Hello Eric, Thank you for your reply. =) That certainly helped me figure out why the probe was giving me errors.Much appreciated. From the help I got on #freebsd and #bsddev on IRC, it seems that in sys/sys/bio.h struct disk *bio_disk; /* Valid below geom_disk.c only */ It is noted that the struct bio disk may only be populated below geom_disk.c It seems that each IO action can go through a long queue of functions, which may or may not actually add a valid struct disk to the struct bio in question, which is why it is occasionally NULL. At least, as far as I understood from the code and asking questions on IRC. Still lots of neat stuff to learn. =) Again, thank you for your help. Regards, Lacey
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?552F10D5.3090204>