MFV r302647: 6922 Emit ESC_ZFS_VDEV_REMOVE_AUX after removing an aux device
illumos/illumos-gate@63364b0ee2 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.wilson@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Dan McDonald <danmcd@omniti.com> Author: Alan Somers <asomers@gmail.com>
This commit is contained in:
parent
9c74e51cc9
commit
3cbf3d5ed6
@ -5773,6 +5773,7 @@ spa_vdev_remove(spa_t *spa, uint64_t guid, boolean_t unspare)
|
||||
} 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 guid, boolean_t unspare)
|
||||
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 guid, boolean_t unspare)
|
||||
*/
|
||||
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 guid, boolean_t unspare)
|
||||
}
|
||||
|
||||
if (!locked)
|
||||
return (spa_vdev_exit(spa, NULL, txg, error));
|
||||
error = spa_vdev_exit(spa, NULL, txg, error);
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user