svn commit: r236267 -
projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Justin T. Gibbs
gibbs at FreeBSD.org
Wed May 30 00:14:13 UTC 2012
Author: gibbs
Date: Wed May 30 00:14:13 2012
New Revision: 236267
URL: http://svn.freebsd.org/changeset/base/236267
Log:
Fix a race condition between the notification of a ZFS vdev's removal
and the removal being visible in the pool's configuration.
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c:
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c:
Defer the generation of a vdev removal event until the spa's
async remove task has run and updated the in-core state for
the vdev being removed. This ensures that a userspace
agent responding to this event can refresh its copy of the pool
configuration and see that the device has been removed.
Submitted by: Alan Somers (Spectra Logic Corporation)
Sponsored by: Spectra Logic Corporation
Modified:
projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
Modified: projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Wed May 30 00:03:33 2012 (r236266)
+++ projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Wed May 30 00:14:13 2012 (r236267)
@@ -5112,6 +5112,8 @@ spa_async_remove(spa_t *spa, vdev_t *vd)
vd->vdev_stat.vs_checksum_errors = 0;
vdev_state_dirty(vd->vdev_top);
+ /* Tell userspace that the vdev is gone. */
+ zfs_post_remove(spa, vd);
}
for (int c = 0; c < vd->vdev_children; c++)
Modified: projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Wed May 30 00:03:33 2012 (r236266)
+++ projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Wed May 30 00:14:13 2012 (r236267)
@@ -83,7 +83,6 @@ vdev_geom_orphan(struct g_consumer *cp)
* async removal support to invoke a close on this
* vdev once it is safe to do so.
*/
- zfs_post_remove(vd->vdev_spa, vd);
vd->vdev_remove_wanted = B_TRUE;
spa_async_request(vd->vdev_spa, SPA_ASYNC_REMOVE);
}
More information about the svn-src-projects
mailing list