svn commit: r196965 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Pawel Jakub Dawidek pjd at FreeBSD.org
Tue Sep 8 08:54:15 UTC 2009


Author: pjd
Date: Tue Sep  8 08:54:15 2009
New Revision: 196965
URL: http://svn.freebsd.org/changeset/base/196965

Log:
  Fix reference count leak for a case where snapshot's mount point is updated.
  Such situation is not supported.
  
  This problem was triggered by something like this:
  
  	# zpool create tank da0
  	# zfs snapshot tank at snap
  	# cd /tank/.zfs/snapshot/snap  (this will mount the snapshot)
  	# cd
  	# mount -u nosuid /tank/.zfs/snapshot/snap  (refcount leak)
  	# zpool export tank
  	cannot export 'tank': pool is busy
  
  MFC after:	1 week

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Tue Sep  8 05:46:38 2009	(r196964)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Tue Sep  8 08:54:15 2009	(r196965)
@@ -337,6 +337,13 @@ zfs_register_callbacks(vfs_t *vfsp)
 	os = zfsvfs->z_os;
 
 	/*
+	 * This function can be called for a snapshot when we update snapshot's
+	 * mount point, which isn't really supported.
+	 */
+	if (dmu_objset_is_snapshot(os))
+		return (EOPNOTSUPP);
+
+	/*
 	 * The act of registering our callbacks will destroy any mount
 	 * options we may have.  In order to enable temporary overrides
 	 * of mount options, we stash away the current values and


More information about the svn-src-head mailing list