svn commit: r209293 - stable/8/sys/kern

Konstantin Belousov kib at FreeBSD.org
Fri Jun 18 09:40:01 UTC 2010


Author: kib
Date: Fri Jun 18 09:40:01 2010
New Revision: 209293
URL: http://svn.freebsd.org/changeset/base/209293

Log:
  MFC r208773:
  Sometimes vnodes share the lock despite being different vnodes on
  different mount points, e.g. the nullfs vnode and the covered vnode
  from the lower filesystem. In this case, existing assertion in
  vop_rename_pre() may be triggered.
  
  Check for vnode locks equiality instead of the vnodes itself to
  not trip over the situation.

Modified:
  stable/8/sys/kern/vfs_subr.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)
  stable/8/sys/geom/sched/   (props changed)

Modified: stable/8/sys/kern/vfs_subr.c
==============================================================================
--- stable/8/sys/kern/vfs_subr.c	Fri Jun 18 09:34:31 2010	(r209292)
+++ stable/8/sys/kern/vfs_subr.c	Fri Jun 18 09:40:01 2010	(r209293)
@@ -3775,9 +3775,10 @@ vop_rename_pre(void *ap)
 	ASSERT_VI_UNLOCKED(a->a_fdvp, "VOP_RENAME");
 
 	/* Check the source (from). */
-	if (a->a_tdvp != a->a_fdvp && a->a_tvp != a->a_fdvp)
+	if (a->a_tdvp->v_vnlock != a->a_fdvp->v_vnlock &&
+	    (a->a_tvp == NULL || a->a_tvp->v_vnlock != a->a_fdvp->v_vnlock))
 		ASSERT_VOP_UNLOCKED(a->a_fdvp, "vop_rename: fdvp locked");
-	if (a->a_tvp != a->a_fvp)
+	if (a->a_tvp == NULL || a->a_tvp->v_vnlock != a->a_fvp->v_vnlock)
 		ASSERT_VOP_UNLOCKED(a->a_fvp, "vop_rename: fvp locked");
 
 	/* Check the target. */


More information about the svn-src-all mailing list