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