Use of deprecated APIs provided by Oracle may result in a system hang

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://docs.infoscale.com 
Solaris 11 SPARC 6.1.1 6.1.1.400 https://docs.infoscale.com 
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

Additional Information

ETrack: 3841242