summaryrefslogtreecommitdiff
path: root/usr/src/cmd/devfsadm/devfsadm.c
diff options
context:
space:
mode:
authoraj <none@none>2007-06-06 16:16:46 -0700
committeraj <none@none>2007-06-06 16:16:46 -0700
commit6e670f775b235d8a831689ffdf4a8f17bbba6b7c (patch)
tree99a720b8095ebdf7ab16bd6dca05c4cefcd00a5b /usr/src/cmd/devfsadm/devfsadm.c
parent5dd69ca1b9d54efcddf4f5b9fc472658299d134d (diff)
downloadillumos-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.c37
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(