Author: avg
Date: Tue Jul 12 11:29:19 2016
New Revision: 302647
URL: https://svnweb.freebsd.org/changeset/base/302647

Log:
  6922 Emit ESC_ZFS_VDEV_REMOVE_AUX after removing an aux device
  
  illumos/illumos-gate@63364b0ee2604783e7a55f8425888867768eafa4
  
https://github.com/illumos/illumos-gate/commit/63364b0ee2604783e7a55f8425888867768eafa4
  
  https://www.illumos.org/issues/6922
    ZFS does not do a config_sync after removing an aux (spare, log, or cache)
    device. AFAICT this isn't being done because it is slow and was deemed
    unnecessary. However, it should be such a rare operation that speed doesn't
    matter, and not doing it results in two problems:
    1) It is theoretically possible to remove an aux device from one pool and
    attach it to another, then lose power. When power is restored, both pools 
would
    think that they own the aux device.
    2) Removal of the aux device doesn't send any useful sysevents to userland.
  
  Reviewed by: George Wilson <george.wil...@delphix.com>
  Reviewed by: Matthew Ahrens <mahr...@delphix.com>
  Approved by: Dan McDonald <dan...@omniti.com>
  Author: Alan Somers <asom...@gmail.com>

Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c
  vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c     Tue Jul 12 11:27:17 
2016        (r302646)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c     Tue Jul 12 11:29:19 
2016        (r302647)
@@ -5481,6 +5481,7 @@ spa_vdev_remove(spa_t *spa, uint64_t gui
                } else {
                        error = SET_ERROR(EBUSY);
                }
+               spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE_AUX);
        } else if (spa->spa_l2cache.sav_vdevs != NULL &&
            nvlist_lookup_nvlist_array(spa->spa_l2cache.sav_config,
            ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0 &&
@@ -5492,6 +5493,7 @@ spa_vdev_remove(spa_t *spa, uint64_t gui
                    ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache, nv);
                spa_load_l2cache(spa);
                spa->spa_l2cache.sav_sync = B_TRUE;
+               spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE_AUX);
        } else if (vd != NULL && vd->vdev_islog) {
                ASSERT(!locked);
                ASSERT(vd == vd->vdev_top);
@@ -5530,6 +5532,7 @@ spa_vdev_remove(spa_t *spa, uint64_t gui
                 */
                spa_vdev_remove_from_namespace(spa, vd);
 
+               spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE_DEV);
        } else if (vd != NULL) {
                /*
                 * Normal vdevs cannot be removed (yet).
@@ -5543,7 +5546,7 @@ spa_vdev_remove(spa_t *spa, uint64_t gui
        }
 
        if (!locked)
-               return (spa_vdev_exit(spa, NULL, txg, error));
+               error = spa_vdev_exit(spa, NULL, txg, error);
 
        return (error);
 }

Modified: vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h Tue Jul 12 
11:27:17 2016        (r302646)
+++ vendor-sys/illumos/dist/uts/common/sys/sysevent/eventdefs.h Tue Jul 12 
11:29:19 2016        (r302647)
@@ -249,6 +249,8 @@ extern "C" {
 #define        ESC_ZFS_RESILVER_START          "ESC_ZFS_resilver_start"
 #define        ESC_ZFS_RESILVER_FINISH         "ESC_ZFS_resilver_finish"
 #define        ESC_ZFS_VDEV_REMOVE             "ESC_ZFS_vdev_remove"
+#define        ESC_ZFS_VDEV_REMOVE_AUX         "ESC_ZFS_vdev_remove_aux"
+#define        ESC_ZFS_VDEV_REMOVE_DEV         "ESC_ZFS_vdev_remove_dev"
 #define        ESC_ZFS_POOL_CREATE             "ESC_ZFS_pool_create"
 #define        ESC_ZFS_POOL_DESTROY            "ESC_ZFS_pool_destroy"
 #define        ESC_ZFS_POOL_IMPORT             "ESC_ZFS_pool_import"
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to