diff options
author | jeff <jeff@FreeBSD.org> | 2002-07-06 04:39:48 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2002-07-06 04:39:48 +0000 |
commit | 3bce786a77bacda7dff2776820c46922a5505154 (patch) | |
tree | f15de65f17dd6e84137752c7fdecc78de3c61b3a /sys | |
parent | e46b098b802ad19a3c592eac2df955c06780f6a6 (diff) | |
download | FreeBSD-src-3bce786a77bacda7dff2776820c46922a5505154.zip FreeBSD-src-3bce786a77bacda7dff2776820c46922a5505154.tar.gz |
Add "vop_rename_pre" to do pre rename lock verification. This is enabled only
with DEBUG_VFS_LOCKS.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vfs_subr.c | 21 | ||||
-rw-r--r-- | sys/sys/vnode.h | 2 |
2 files changed, 22 insertions, 1 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 6662d01..fb7ba43 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 3c75429..4e315d7 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) |