svn commit: r208773 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Thu Jun 3 10:20:09 UTC 2010
Author: kib
Date: Thu Jun 3 10:20:08 2010
New Revision: 208773
URL: http://svn.freebsd.org/changeset/base/208773
Log:
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.
Submitted by: Mikolaj Golub <to.my.trociny at gmail.com>
Tested by: pho
MFC after: 2 weeks
Modified:
head/sys/kern/vfs_subr.c
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Thu Jun 3 10:11:45 2010 (r208772)
+++ head/sys/kern/vfs_subr.c Thu Jun 3 10:20:08 2010 (r208773)
@@ -3793,9 +3793,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-head
mailing list