Print this page
NEX-15860 devfsadmd shouldn't post disk add/remove events when disk minors are added/removed
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
NEX-15860 devfsadmd shouldn't post disk add/remove events when disk minors are added/removed
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Revert "Revert "6602 lofi should support labeled devices""
This reverts commit 21386c8bd8477810b291eee22e08f1382e70cdf3.
NEX-1881 c0 controller instance should be reserved for vhci
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Revert "6602 lofi should support labeled devices"
This reverts commit 406fc5100dac8d225a315a6def6be8d628f34e24.
@@ -19,11 +19,11 @@
* CDDL HEADER END
*/
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
- * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2018 Nexenta Systems, Inc.
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Devfsadm replaces drvconfig, audlinks, disks, tapes, ports, devlinks
@@ -8221,28 +8221,32 @@
if (driver_name == NULL || instance == -1)
goto out;
if (strcmp(subclass, ESC_DISK) == 0) {
/*
- * While we're removing labeled lofi device, we will receive
- * event for every registered minor device and lastly,
- * an event with minor set to NULL, as in following example:
- * class: EC_dev_remove subclass: disk
- * node_path: /pseudo/lofi@1 driver: lofi minor: u,raw
- * class: EC_dev_remove subclass: disk
- * node_path: /pseudo/lofi@1 driver: lofi minor: NULL
+ * FIXME Currently we will get ESC_devfs_devi_remove for labeled
+ * lofi devices only after all its minors are already removed,
+ * so the lookup_disk_dev_name() call below will fail.
*
- * When we receive this last event with minor set to NULL,
- * all lofi minor devices are already removed and the call to
- * lookup_disk_dev_name() would result in error.
- * To prevent name lookup error messages for this case, we
- * need to filter out that last event.
+ * Given the above, ignore all lofi events except for lofi minor
+ * remove event for minor 'a' (chosen arbitrarily) so that we
+ * post exactly one ESC_dev_remove/disk event for labeled lofi
+ * devices, and don't get error from lookup_disk_dev_name().
*/
if (strcmp(class, EC_DEV_REMOVE) == 0 &&
- strcmp(driver_name, "lofi") == 0 && minor == NULL) {
+ strcmp(driver_name, "lofi") == 0 &&
+ (minor == NULL || strcmp(minor, "a") != 0)) {
nvlist_free(nvl);
return (NULL);
+ }
+ /*
+ * Don't post disk minor events (except for lofi workaround),
+ * they don't provide any useful information.
+ */
+ if (minor != NULL && strcmp(minor, "a") != 0) {
+ nvlist_free(nvl);
+ return (NULL);
}
if ((dev_name = lookup_disk_dev_name(node_path)) == NULL) {
dev_name_lookup_err = 1;
goto out;
}