Gerhard Fuernkranz
2008-Jun-17 20:16 UTC
[dtrace-discuss] io:::wait-start -- invalid address
I''m trying to use the io:::wait-start and wait-done probes, and
according to the docs, args[1] points to a devinfo_t. When I try to
access e.g. args[1]->dev_minor or args[1]->dev_instance or dev_statname
from the io:::wait-start/done probe, then I get frequently [but not
always] errors like
dtrace: error on enabled probe ID 247 (ID 58:
io:genunix:biowait:wait-start): invalid address (0x0) in action #1
at DIF offset 196
The dev_name always seems to be "nfs" when this happens [accessing
dev_name never failed with "invalid address"], although I have doubts,
whether the affected I/O requests are really NFS I/O requests [I rather
think these are disk I/Os]. I also introduced an
ERROR
{
stack();
}
probe in order to capture the stack when the error happens, and in most
error cases I got something like
0x133877c0
0x1402310
genunix`biowait+0x20
genunix`bwrite_common+0x1ac
ufs`bmap_write+0x9dc
ufs`wrip+0x448
ufs`ufs_write+0x580
genunix`fop_write+0x20
genunix`write+0x268
genunix`dtrace_systrace_syscall32+0xac
unix`syscall_trap32+0xcc
but also e.g.
0xebc50c0
0x1402310
genunix`biowait+0x20
scsi`scsi_uscsi_handle_cmd+0x20c
sd`sd_send_scsi_cmd+0x114
sd`sd_send_scsi_TEST_UNIT_READY+0x100
sd`sd_dkio_get_vtoc+0x6c
sd`sdioctl+0xbc0
genunix`fop_ioctl+0x20
genunix`ioctl+0x184
genunix`dtrace_systrace_syscall32+0xac
unix`syscall_trap32+0xcc
or
0x114de840
0x1402310
genunix`biowait+0x20
scsi`scsi_uscsi_handle_cmd+0x20c
sd`sd_send_scsi_cmd+0x114
sd`sd_send_scsi_TEST_UNIT_READY+0x100
sd`sd_dkio_get_geometry+0x4c
sd`sdioctl+0xb54
genunix`fop_ioctl+0x20
cl_quorum`__1cZquorum_ioctl_with_retries6FpnFvnode_ilpi_i_+0x28
cl_quorum`__1cWquorum_scsi_get_sblkno6FpnFvnode_rL_i_+0x4c
cl_quorum`__1cbFquorum_disk_initialize_reserved6FpnFvnode_rL_i_+0x8c
0x7b72f2a4
cl_quorum`__1cVquorum_algorithm_implbAprocess_device_quorum_info6M_v_+0x20c
cl_quorum`__1cVquorum_algorithm_implWinitialize_quorum_info6MrnTquorum_table_struct__v_+0x568
cl_quorum`__1cVquorum_algorithm_implUquorum_table_updated6MrnFCORBALEnvironment__v_+0x330
cl_haci`__1cZclconf_infr_callback_implKdid_update6MpkcnDccrPccr_update_type_rnFCORBALEnvironment__v_+0x108
cl_haci`__1cMtable_accessPcall_did_update6MpcnDccrPccr_update_type__v_+0xb8
cl_haci`__1cTupdatable_copy_implGunlock6MrnFCORBALEnvironment__v_+0xec
cl_haci`__1cQtable_trans_implNunlock_copies6MrnFCORBALEnvironment__v_+0x4c
or
0x135650c0
0x1402310
genunix`biowait+0x20
genunix`bwrite_common+0x1ac
ufs`ufs_sbwrite+0x108
ufs`ufs_trans_sbwrite+0x8c
ufs`ufs_checkclean+0x1e8
ufs`ufs_update+0x290
ufs`ufs_sync+0x2c
genunix`vfs_sync+0x98
genunix`syssync+0x4
genunix`dtrace_systrace_syscall32+0xac
unix`syscall_trap32+0xcc
Am I doing anything wrong or might this be a bug in the devinfo_t
translators? Is it illegal to access dev_minor, dev_instance,... from
these probes?
Thanks,
Gerhard