Author: mav
Date: Thu Sep  1 14:17:30 2016
New Revision: 305198
URL: https://svnweb.freebsd.org/changeset/base/305198

Log:
  MFV r302647: 6922 Emit ESC_ZFS_VDEV_REMOVE_AUX after removing an aux device
  
  illumos/illumos-gate@63364b0ee2604783e7a55f8425888867768eafa4
  
https://github.com/illumos/illumos-gate/commit/63364b0ee2604783e7a55f84258888677
  68eafa4
  
  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 
woul
  d
    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:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  head/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h
Directory Properties:
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Thu Sep  1 
14:06:30 2016        (r305197)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Thu Sep  1 
14:17:30 2016        (r305198)
@@ -5773,6 +5773,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 &&
@@ -5784,6 +5785,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);
@@ -5822,6 +5824,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).
@@ -5835,7 +5838,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: head/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h       
Thu Sep  1 14:06:30 2016        (r305197)
+++ head/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h       
Thu Sep  1 14:17:30 2016        (r305198)
@@ -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