diff options
author | aj <none@none> | 2007-06-06 16:16:46 -0700 |
---|---|---|
committer | aj <none@none> | 2007-06-06 16:16:46 -0700 |
commit | 6e670f775b235d8a831689ffdf4a8f17bbba6b7c (patch) | |
tree | 99a720b8095ebdf7ab16bd6dca05c4cefcd00a5b /usr/src/cmd/devfsadm/devfsadm.c | |
parent | 5dd69ca1b9d54efcddf4f5b9fc472658299d134d (diff) | |
download | illumos-joyent-6e670f775b235d8a831689ffdf4a8f17bbba6b7c.tar.gz |
6486759 TX - hot plugging USB device can lead to inaccessible cdrom
Diffstat (limited to 'usr/src/cmd/devfsadm/devfsadm.c')
-rw-r--r-- | usr/src/cmd/devfsadm/devfsadm.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/usr/src/cmd/devfsadm/devfsadm.c b/usr/src/cmd/devfsadm/devfsadm.c index 4b3885e114..deef0d2730 100644 --- a/usr/src/cmd/devfsadm/devfsadm.c +++ b/usr/src/cmd/devfsadm/devfsadm.c @@ -2461,36 +2461,33 @@ devfsadm_mklink(char *link, di_node_t node, di_minor_t minor, int flags) == DEVFSADM_SUCCESS) { linknew = TRUE; add_link_to_cache(link, acontents); - if (system_labeled && (flags & DA_ADD)) { - /* - * Add this device to the list of allocatable devices. - */ - int instance = di_instance(node); - - (void) da_add_list(&devlist, devlink, instance, flags); - update_devdb = flags; - } } else { linknew = FALSE; } if (link_exists == TRUE) { - if (system_labeled && (flags & DA_CD)) { + /* Link exists or was just created */ + (void) di_devlink_add_link(devlink_cache, link, rcontents, + DI_PRIMARY_LINK); + + if (system_labeled && (flags & DA_ADD)) { /* - * if this is a removable disk, add it - * as that to device allocation database. + * Add this to the list of allocatable devices. If this + * is a hotplugged, removable disk, add it as rmdisk. */ - if (_da_check_for_usb(devlink, root_dir) == 1) { - int instance = di_instance(node); + int instance = di_instance(node); + if ((flags & DA_CD) && + (_da_check_for_usb(devlink, root_dir) == 1)) { (void) da_add_list(&devlist, devlink, instance, DA_ADD|DA_RMDISK); update_devdb = DA_RMDISK; + } else if (linknew == TRUE) { + (void) da_add_list(&devlist, devlink, instance, + flags); + update_devdb = flags; } } - /* Link exists or was just created */ - (void) di_devlink_add_link(devlink_cache, link, rcontents, - DI_PRIMARY_LINK); } return (rv); @@ -6907,7 +6904,7 @@ read_logindevperm_file(void) FILE *fp; char line[MAX_LDEV_LINE]; int ln, perm, rv; - char *cp, *console, *devlist, *dev; + char *cp, *console, *dlist, *dev; char *lasts, *devlasts, *permstr, *drv; struct driver_list *list, *next; @@ -6984,12 +6981,12 @@ read_logindevperm_file(void) continue; } - if ((devlist = strtok_r(NULL, LDEV_DELIMS, &lasts)) == NULL) { + if ((dlist = strtok_r(NULL, LDEV_DELIMS, &lasts)) == NULL) { err_print(IGNORING_LINE_IN, ln, LDEV_FILE); continue; } - dev = strtok_r(devlist, LDEV_DEV_DELIM, &devlasts); + dev = strtok_r(dlist, LDEV_DEV_DELIM, &devlasts); while (dev) { ldev = (struct login_dev *)s_zalloc( |