Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 May 2012 00:14:13 +0000 (UTC)
From:      "Justin T. Gibbs" <gibbs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r236267 - projects/zfsd/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201205300014.q4U0EDWT013145@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205300014.q4U0EDWT013145>