According to dtrace_io(4) and "dtrace -lvn io:::", the dtrace_io probes use
a struct bio * as arg to represent the I/O request, however that is only
true for the probes declared with a define with _BIO_ in its name.
57 #define DTRACE_DEVSTAT_START() SDT_PROBE2(io, , , start, NULL, ds)
58 #define DTRACE_DEVSTAT_BIO_START() SDT_PROBE2(io, , , start, bp, ds)
59 #define DTRACE_DEVSTAT_DONE() SDT_PROBE2(io, , , done, NULL, ds)
60 #define DTRACE_DEVSTAT_BIO_DONE() SDT_PROBE2(io, , , done, bp, ds)
As a result, even simple scripts like the example in dtrace_io(4) result in errors like:
dtrace: error on enabled probe ID 1 (ID 41752: io:kernel:none:start): invalid address (0x20) in action #6 at DIF offset 16
One can workaround this by skipping probes without bio reference by adding:
/args != NULL/
but it would be more convenient if probes with bio reference had a different name than
those that don't.