From cc8662b0f9d569bd8da2cb558ccc5a2a38f53198 Mon Sep 17 00:00:00 2001 From: Jeff Roberson Date: Sat, 6 Jul 2002 04:39:48 +0000 Subject: [PATCH] Add "vop_rename_pre" to do pre rename lock verification. This is enabled only with DEBUG_VFS_LOCKS. --- sys/kern/vfs_subr.c | 21 ++++++++++++++++++++- sys/sys/vnode.h | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 6662d019aaf9..fb7ba43c21f7 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -234,7 +234,26 @@ int (*softdep_process_worklist_hook)(struct mount *); int vfs_badlock_print = 1; /* Panic on violation */ int vfs_badlock_panic = 1; -#endif + +void +vop_rename_pre(void *ap) +{ + struct vop_rename_args *a = ap; + + /* Check the source (from) */ + if (a->a_tdvp != a->a_fdvp) + ASSERT_VOP_UNLOCKED(a->a_fdvp, "vop_rename: fdvp locked.\n"); + if (a->a_tvp != a->a_fvp) + ASSERT_VOP_UNLOCKED(a->a_fvp, "vop_rename: tvp locked.\n"); + + /* Check the target */ + if (a->a_tvp) + ASSERT_VOP_LOCKED(a->a_tvp, "vop_rename: tvp not locked.\n"); + + ASSERT_VOP_LOCKED(a->a_tdvp, "vop_rename: tdvp not locked.\n"); +} + +#endif /* DEBUG_VFS_LOCKS */ void v_addpollinfo(struct vnode *vp) diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 3c7542976440..4e315d70fa6c 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -523,6 +523,8 @@ do { \ str, _vp); \ } while (0) +void vop_rename_pre(void *a); + #else #define ASSERT_VOP_LOCKED(vp, str)