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,29 ****
* CDDL HEADER END
*/
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
! * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Devfsadm replaces drvconfig, audlinks, disks, tapes, ports, devlinks
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
! * 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,8248 ****
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
*
! * 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.
*/
if (strcmp(class, EC_DEV_REMOVE) == 0 &&
! strcmp(driver_name, "lofi") == 0 && minor == NULL) {
nvlist_free(nvl);
return (NULL);
}
if ((dev_name = lookup_disk_dev_name(node_path)) == NULL) {
dev_name_lookup_err = 1;
goto out;
}
--- 8221,8252 ----
if (driver_name == NULL || instance == -1)
goto out;
if (strcmp(subclass, ESC_DISK) == 0) {
/*
! * 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.
*
! * 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(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;
}