svn commit: r215554 - stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Martin Matuska mm at FreeBSD.org
Sat Nov 20 10:12:21 UTC 2010


Author: mm
Date: Sat Nov 20 10:12:20 2010
New Revision: 215554
URL: http://svn.freebsd.org/changeset/base/215554

Log:
  MFC r215260:
  
  Disable VFS_HOLD placed on mnt_vnodecovered during the mount of a snapshot
  and VFS_RELE on a non-existing hold on snapshot parent's z_vfs.
  
  This disables the changes from OpenSolaris onnv-revision 9234:bffdc4fc05c4
  (bug IDs: 6792139, 6794830) - not applicable to FreeBSD.
  
  This fixes the process hang if umounting a manually mounted snapshot.
  
  Reported by:	Alexander Zagrebin <alexz at visp.ru>
  Approved by:	delphij (mentor)

Modified:
  stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Sat Nov 20 08:40:37 2010	(r215553)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Sat Nov 20 10:12:20 2010	(r215554)
@@ -1218,12 +1218,14 @@ zfs_mount(vfs_t *vfsp)
 	error = zfs_domount(vfsp, osname);
 	PICKUP_GIANT();
 
+#ifdef sun
 	/*
 	 * Add an extra VFS_HOLD on our parent vfs so that it can't
 	 * disappear due to a forced unmount.
 	 */
 	if (error == 0 && ((zfsvfs_t *)vfsp->vfs_data)->z_issnap)
 		VFS_HOLD(mvp->v_vfsp);
+#endif	/* sun */
 
 out:
 	return (error);
@@ -1768,12 +1770,14 @@ zfs_freevfs(vfs_t *vfsp)
 {
 	zfsvfs_t *zfsvfs = vfsp->vfs_data;
 
+#ifdef sun
 	/*
 	 * If this is a snapshot, we have an extra VFS_HOLD on our parent
 	 * from zfs_mount().  Release it here.
 	 */
 	if (zfsvfs->z_issnap)
 		VFS_RELE(zfsvfs->z_parent->z_vfs);
+#endif	/* sun */
 
 	zfsvfs_free(zfsvfs);
 


More information about the svn-src-all mailing list