svn commit: r302647 - in vendor-sys/illumos/dist/uts/common: fs/zfs sys/sysevent

Andriy Gapon avg at FreeBSD.org
Tue Jul 12 11:29:21 UTC 2016


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 at 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.wilson at delphix.com>
  Reviewed by: Matthew Ahrens <mahrens at delphix.com>
  Approved by: Dan McDonald <danmcd at omniti.com>
  Author: Alan Somers <asomers at 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"


More information about the svn-src-all mailing list