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>