book
Article ID: 100033039
calendar_today
Updated On:
Description
Error Message
The hung threads will have stack similar to the following:
Example 1
void genunix:cv_wait
void genunix:ndi_devi_enter
int genunix:devi_config_one
int genunix:ndi_devi_config_one
int genunix:resolve_pathname_noalias
int genunix:resolve_pathname
dev_t genunix:ddi_pathname_to_dev_t
void vxdmp:dmp_setbootdev
int vxdmp:_init
int genunix:modinstall
Example 2
void genunix:cv_wait
void genunix:ndi_devi_enter
di_off_t devinfo:di_copynode
di_off_t devinfo:di_copytree
di_off_t devinfo:di_snapshot
di_off_t devinfo:di_snapshot_and_clean
int devinfo:di_ioctl
specfs:spec_ioctl
int genunix:fop_ioctl
int genunix:ioctl
unix:_syscall_no_proc_exit32
Cause
Oracle has deprecated some APIs:
ddi_pathname_to_dev_t()
ddi_find_devinfo()
ddi_install_driver()
devinfo_tree_lock
e_ddi_get_dev_info()
These were used by VxVM (Veritas Volume Manager) but were not thread safe.
If VxVM modules are loaded in parallel to the other OS modules while making use of these APIs, it may result in a deadlock and a hang could be observed.
Resolution
Deprecated ddi_x() API calls have been replaced with ldi_x() calls which are thread safe.
The fix is included in the following VxVM patch releases:
| OS Version | Platform | SFHA version | Hotfix Version | Patch Location |
| Solaris 10 | SPARC | 6.0.5 | 6.0.5.303 | Contact Enterprise Support |
| Solaris 10 | x86 | 6.0.5 | 6.0.5.303 | Contact Enterprise Support |
| Solaris 11 | SPARC | 6.0.5 | 6.0.5.302 | Contact Enterprise Support |
| Solaris 10 | SPARC | 6.1.1 | 6.1.1.400 | https://sort.veritas.com/patch/detail/11449 |
| Solaris 11 | SPARC | 6.1.1 | 6.1.1.400 | https://sort.veritas.com/patch/detail/11448 |
| Solaris 11 | SPARC | 6.2.1 | 6.2.1.205 | Contact Enterprise Support |
| Solaris 10 | SPARC | 6.2.1 | 6.2.1.010 | Contact Enterprise Support |
Issue/Introduction
Threads will be hung and and the stack will contain any of the following functions.
ddi_pathname_to_dev_t()
ddi_find_devinfo()
ddi_install_driver()
devinfo_tree_lock
e_ddi_get_dev_info()
Stack may look like below -
void genunix:cv_wait
void genunix:ndi_devi_enter
int genunix:devi_config_one
int genunix:ndi_devi_config_one
int genunix:resolve_pathname_noalias
int genunix:resolve_pathname
dev_t genunix:ddi_pathname_to_dev_t
void vxdmp:dmp_setbootdev
int vxdmp:_init
int genunix:modinstall