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@gmail.com> Tested by: pho MFC after: 2 weeks
This commit is contained in:
parent
2bbfbc3fe2
commit
882da14c3d
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user