G''Day Folks,
Looks like Ryan has found a small bug with DTrace and Veritas volumes (I
think I have a workaround already). I didn''t find it on
bugs.opensolaris.org...
On Sat, 16 Jul 2005 matty91 at gmail.com wrote:
> On Sat, 16 Jul 2005, Brendan Gregg wrote:
>
> > G''Day Ryan,
> >
> > I think there may be a bug with how DTrace handles veritas volumes. I
> > don''t have a Solaris 10 + veritas test server on hand, so
could I ask you
> > to test the following?
> >
> > dtrace -n ''io:::start { printf("%s",
args[1]->dev_statname); }''
> >
>
> It looks like it''s still producing errors:
>
> # dtrace -n ''io:::start { printf("%s",
args[1]->dev_statname); }''
>
> dtrace: description ''io:::start '' matched 3 probes
> CPU ID FUNCTION:NAME
> 0 3936 bdev_strategy:start dad1
> 0 3936 bdev_strategy:start dad1
> 0 3936 bdev_strategy:start dad1
> 0 3936 bdev_strategy:start sd3
> 0 3936 bdev_strategy:start sd3
> 0 3936 bdev_strategy:start dad1
> 0 3936 bdev_strategy:start dad1
> dtrace: error on enabled probe ID 3 (ID 3935:
> io:genunix:default_physio:start): invalid address (0x0) in action #1 at
> DIF offset 196
> 0 3936 bdev_strategy:start sd1
> 0 3936 bdev_strategy:start sd1
> 0 3936 bdev_strategy:start sd3
> 0 3936 bdev_strategy:start sd3
> dtrace: error on enabled probe ID 3 (ID 3935:
> io:genunix:default_physio:start): invalid address (0x0) in action #1 at
> DIF offset 196
[...]
Looks like the args[1]->dev_statname string from the io provider is
sometimes NULL.
(The dev_statname translator from /usr/lib/dtrace/io.d is fairly crafty.
I should have read this earlier, I would have worried less about using
similar ternary operator craftyness. :-)
I''m thinking of using the following as a workaround,
self->devn = args[1]->dev_statname != 0 ? args[1]->dev_statname :
".";
cheers,
Brendan
[Sydney, Australia]