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

John Baldwin jhb at FreeBSD.org
Wed Mar 18 09:19:45 PDT 2009


Author: jhb
Date: Wed Mar 18 16:19:44 2009
New Revision: 189967
URL: http://svn.freebsd.org/changeset/base/189967

Log:
  The zfs_get_xattrdir() function is used to find the extended attribute
  directory for a znode.  When the directory already exists, it returns a
  referenced but unlocked vnode.  When a directory does not yet exist, it
  calls zfs_make_xattrdir() to create a new one.  zfs_make_xattrdir() returns
  the vnode both referenced and and locked and zfs_get_xattrdir() was leaking
  this vnode lock to its callers.  Fix this by dropping the vnode lock if
  zfs_make_xattrdir() successfully creates a new extended attribute
  directory.
  
  Reviewed by:	pjd

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

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c	Wed Mar 18 16:09:05 2009	(r189966)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c	Wed Mar 18 16:19:44 2009	(r189967)
@@ -940,6 +940,8 @@ top:
 		/* NB: we already did dmu_tx_wait() if necessary */
 		goto top;
 	}
+	if (error == 0)
+		VOP_UNLOCK(*xvpp, 0);
 
 	return (error);
 }


More information about the svn-src-all mailing list