OpenSolaris

Printable Version Enter a New Search
Bug ID 6612207
Synopsis update_drv fails when alias already present and this impact live upgrade.
State 10-Fix Delivered (Fix available in build)
Category:Subcategory kernel:devfs
Keywords
Responsible Engineer Jerry Gilliam
Reported Against snv_107
Duplicate Of
Introduced In solaris_10
Commit to Fix snv_106
Fixed In snv_106
Release Fixed solaris_nevada(snv_106)
Related Bugs 4446064 , 6619463 , 6636050 , 6799076 , 6827539 , 6844876
Submit Date 2-October-2007
Last Update Date 27-May-2009
Description
If you attempt to update a driver already installed on a system, and one of the aliases you pass in is already present in /etc/driver_aliases, update_drv fails.

update_drv should skip the aliases already present and continue on. (assuming they are assigned to the driver you are updating).
This impact live upgrade from s10u7 to snv_115 and SUNWaudd had problems:

SUNWaudd cannot be installed successfully due to a bad postinstall script as follow:

BD_OPT=-b /a
BD_OPT_DEFAULT=-b /a
BASEDIR_DEFAULT=/a
EXIT=0
+ pkg_drvadd -n -m * 0666 root sys audio
STATUS=0
+ driver_name -n -m * 0666 root sys audio
+ expr 4 - 1
+ shift 3
DRV=audio
+ basedir_override -n -m * 0666 root sys audio
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audio
DRIVER=audio
+ grep ^audio  /a/etc/name_to_major
+ [ 1 -eq 0 ]
+ return 0
CMD=add_drv
UPDATE=0
CHECK_ADD=0
CMD=add_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 0 -eq 0 ]
CMD=add_drv -b /a -n
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 0 -eq 1 ]
CMD=add_drv -b /a -n -m "* 0666 root sys"
+ getopts fnvb:c:i:m:p:P: OPT
CMD=add_drv -b /a -n -m "* 0666 root sys" audio
+ eval add_drv -b /a -n -m "* 0666 root sys" audio
+ add_drv -b /a -n -m * 0666 root sys audio
Reboot client to install driver.
+ [ 0 -ne 0 ]
+ return 0
+ pkg_drvadd -n austr
STATUS=0
+ driver_name -n austr
+ expr 2 - 1
+ shift 1
DRV=austr
+ basedir_override -n austr
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed austr
DRIVER=austr
+ grep ^austr  /a/etc/name_to_major
+ [ 1 -eq 0 ]
+ return 0
CMD=add_drv
UPDATE=0
CHECK_ADD=0
CMD=add_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 0 -eq 0 ]
CMD=add_drv -b /a -n
+ getopts fnvb:c:i:m:p:P: OPT
CMD=add_drv -b /a -n austr
+ eval add_drv -b /a -n austr
+ add_drv -b /a -n austr
Reboot client to install driver.
+ [ 0 -ne 0 ]
+ return 0
+ pkg_drvadd -n -i "pci1274,1371" "pci1274,5880" audioens
STATUS=0
+ driver_name -n -i "pci1274,1371" "pci1274,5880" audioens
+ expr 4 - 1
+ shift 3
DRV=audioens
+ basedir_override -n -i "pci1274,1371" "pci1274,5880" audioens
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audioens
DRIVER=audioens
+ grep ^audioens  /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ eval update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ update_drv -b /a -a -i "pci1274,1371" "pci1274,5880" audioens
("pci1274,1371") already in use as a driver or alias.

+ not_installed audioens
DRIVER=audioens
+ grep ^audioens  /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ eval update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ update_drv -b /a -a -i "pci1274,1371" "pci1274,5880" audioens
("pci1274,1371") already in use as a driver or alias.

+ not_installed audioens
DRIVER=audioens
+ grep ^audioens  /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ eval update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' audioens
+ update_drv -b /a -a -i "pci1274,1371" "pci1274,5880" audioens
("pci1274,1371") already in use as a driver or alias.
+ [ 255 -ne 0 ]
+ echo pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci1274,1371" "pci1274,588
0"' audioens"!\n
pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci1274,1371" "pci1274,5880"' aud
ioens"!

STATUS=1
+ return 1
EXIT=1
+ pkg_drvadd -n -i "pci1274,5000" audiopci
STATUS=0
+ driver_name -n -i "pci1274,5000" audiopci
+ expr 4 - 1
+ shift 3
DRV=audiopci
+ basedir_override -n -i "pci1274,5000" audiopci
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audiopci
DRIVER=audiopci
+ grep ^audiopci  /a/etc/name_to_major
+ [ 1 -eq 0 ]
+ return 0
CMD=add_drv
UPDATE=0
CHECK_ADD=0
CMD=add_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 0 -eq 0 ]
CMD=add_drv -b /a -n
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 0 -eq 1 ]
CMD=add_drv -b /a -n -i '"pci1274,5000"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=add_drv -b /a -n -i '"pci1274,5000"' audiopci
+ eval add_drv -b /a -n -i '"pci1274,5000"' audiopci
+ add_drv -b /a -n -i "pci1274,5000" audiopci

+ add_drv -b /a -n -i "pci1274,5000" audiopci
Reboot client to install driver.
+ [ 0 -ne 0 ]
+ return 0
+ pkg_drvadd -n -i "pci10b9,5451" audiots
STATUS=0
+ driver_name -n -i "pci10b9,5451" audiots
+ expr 4 - 1
+ shift 3
DRV=audiots
+ basedir_override -n -i "pci10b9,5451" audiots
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audiots
DRIVER=audiots
+ grep ^audiots	 /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"pci10b9,5451"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"pci10b9,5451"' audiots
+ eval update_drv -b /a -a -i '"pci10b9,5451"' audiots
+ update_drv -b /a -a -i "pci10b9,5451" audiots
("pci10b9,5451") already in use as a driver or alias.
+ [ 255 -ne 0 ]
+ echo pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci10b9,5451"' audiots"!\n

pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci10b9,5451"' audiots"!
STATUS=1
+ return 1
EXIT=1
+ pkg_drvadd -n -i "SUNW,CS4231" audiocs
STATUS=0
+ driver_name -n -i "SUNW,CS4231" audiocs
+ expr 4 - 1
+ shift 3
DRV=audiocs
+ basedir_override -n -i "SUNW,CS4231" audiocs
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audiocs
DRIVER=audiocs
+ grep ^audiocs	 /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"SUNW,CS4231"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"SUNW,CS4231"' audiocs
+ eval update_drv -b /a -a -i '"SUNW,CS4231"' audiocs
+ update_drv -b /a -a -i "SUNW,CS4231" audiocs
("SUNW,CS4231") already in use as a driver or alias.
+ [ 255 -ne 0 ]
+ echo pkg_drvadd(): Failed "update_drv -b /a -a -i '"SUNW,CS4231"' audiocs"!\n
pkg_drvadd(): Failed "update_drv -b /a -a -i '"SUNW,CS4231"' audiocs"!
STATUS=1
+ return 1
EXIT=1
+ pkg_drvadd -n -i "pci10b9,5455" audio1575
STATUS=0
+ driver_name -n -i "pci10b9,5455" audio1575
+ expr 4 - 1
+ shift 3
DRV=audio1575
+ basedir_override -n -i "pci10b9,5455" audio1575
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audio1575
DRIVER=audio1575
+ grep ^audio1575  /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"SUNW,CS4231"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"SUNW,CS4231"' audiocs
+ eval update_drv -b /a -a -i '"SUNW,CS4231"' audiocs
+ update_drv -b /a -a -i "SUNW,CS4231" audiocs
("SUNW,CS4231") already in use as a driver or alias.
+ [ 255 -ne 0 ]
+ echo pkg_drvadd(): Failed "update_drv -b /a -a -i '"SUNW,CS4231"' audiocs"!\n
pkg_drvadd(): Failed "update_drv -b /a -a -i '"SUNW,CS4231"' audiocs"!
STATUS=1
+ return 1
EXIT=1
+ pkg_drvadd -n -i "pci10b9,5455" audio1575
STATUS=0
+ driver_name -n -i "pci10b9,5455" audio1575
+ expr 4 - 1
+ shift 3
DRV=audio1575
+ basedir_override -n -i "pci10b9,5455" audio1575
OPTIND=1
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
+ getopts fnvb:c:i:m:p:P: OPT
OPTIND=1
BASEDIR=/a
BD_OPT=-b /a
+ not_installed audio1575
DRIVER=audio1575
+ grep ^audio1575  /a/etc/name_to_major
+ [ 0 -eq 0 ]
+ return 1
CMD=update_drv
UPDATE=1
CHECK_ADD=1
CMD=update_drv -b /a
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 0 ]
+ getopts fnvb:c:i:m:p:P: OPT
+ [ 1 -eq 1 ]
CMD=update_drv -b /a -a
CHECK_ADD=0
CMD=update_drv -b /a -a -i '"pci10b9,5455"'
+ getopts fnvb:c:i:m:p:P: OPT
CMD=update_drv -b /a -a -i '"pci10b9,5455"' audio1575
+ eval update_drv -b /a -a -i '"pci10b9,5455"' audio1575
+ update_drv -b /a -a -i "pci10b9,5455" audio1575
("pci10b9,5455") already in use as a driver or alias.
+ [ 255 -ne 0 ]
+ echo pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci10b9,5455"' audio1575"!
\n
pkg_drvadd(): Failed "update_drv -b /a -a -i '"pci10b9,5455"' audio1575"!

STATUS=1
+ return 1
EXIT=1
+ exit 1
pkgadd: ERROR: postinstall script did not complete successfully

Installation of <SUNWaudd> failed.
pkgadd return code = 1

Looks like the fix should be backported to s10 updates and S9.
Work Around
N/A
Comments
N/A