diff options
Diffstat (limited to 'sys/kern')
| -rw-r--r-- | sys/kern/kern_lock.c | 26 | ||||
| -rw-r--r-- | sys/kern/vfs_default.c | 12 | ||||
| -rw-r--r-- | sys/kern/vfs_vnops.c | 17 |
3 files changed, 51 insertions, 4 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 0903f6e1e035..e832acff84a2 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -38,7 +38,7 @@ * SUCH DAMAGE. * * @(#)kern_lock.c 8.18 (Berkeley) 5/21/95 - * $Id: kern_lock.c,v 1.21 1999/01/08 17:31:08 eivind Exp $ + * $Id: kern_lock.c,v 1.22 1999/01/10 01:58:24 eivind Exp $ */ #include "opt_lint.h" @@ -171,11 +171,20 @@ acquire(struct lock *lkp, int extflags, int wanted) { * accepted shared locks and shared-to-exclusive upgrades to go away. */ int +#ifndef DEBUG_LOCKS lockmgr(lkp, flags, interlkp, p) +#else +debuglockmgr(lkp, flags, interlkp, p, name, file, line) +#endif struct lock *lkp; u_int flags; struct simplelock *interlkp; struct proc *p; +#ifdef DEBUG_LOCKS + const char *name; /* Name of lock function */ + const char *file; /* Name of file call is from */ + int line; /* Line number in file */ +#endif { int error; pid_t pid; @@ -283,6 +292,11 @@ lockmgr(lkp, flags, interlkp, p) panic("lockmgr: non-zero exclusive count"); #endif lkp->lk_exclusivecount = 1; +#if defined(DEBUG_LOCKS) + lkp->lk_filename = file; + lkp->lk_lineno = line; + lkp->lk_lockername = name; +#endif COUNT(p, 1); break; } @@ -338,6 +352,11 @@ lockmgr(lkp, flags, interlkp, p) panic("lockmgr: non-zero exclusive count"); #endif lkp->lk_exclusivecount = 1; +#if defined(DEBUG_LOCKS) + lkp->lk_filename = file; + lkp->lk_lineno = line; + lkp->lk_lockername = name; +#endif COUNT(p, 1); break; @@ -383,6 +402,11 @@ lockmgr(lkp, flags, interlkp, p) lkp->lk_flags |= LK_DRAINING | LK_HAVE_EXCL; lkp->lk_lockholder = pid; lkp->lk_exclusivecount = 1; +#if defined(DEBUG_LOCKS) + lkp->lk_filename = file; + lkp->lk_lineno = line; + lkp->lk_lockername = name; +#endif COUNT(p, 1); break; diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index 47545c3b87c8..b73b126a82cc 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -205,7 +205,12 @@ vop_stdlock(ap) return 0; } +#ifndef DEBUG_LOCKS return (lockmgr(l, ap->a_flags, &ap->a_vp->v_interlock, ap->a_p)); +#else + return (debuglockmgr(l, ap->a_flags, &ap->a_vp->v_interlock, ap->a_p, + "vop_stdlock", ap->a_vp->filename, ap->a_vp->line)); +#endif } int @@ -355,7 +360,12 @@ vop_sharedlock(ap) } if (flags & LK_INTERLOCK) vnflags |= LK_INTERLOCK; - return(lockmgr(vp->v_vnlock, vnflags, &vp->v_interlock, ap->a_p)); +#ifndef DEBUG_LOCKS + return (lockmgr(vp->v_vnlock, vnflags, &vp->v_interlock, ap->a_p)); +#else + return (debuglockmgr(vp->v_vnlock, vnflags, &vp->v_interlock, ap->a_p, + "vop_sharedlock", vp->filename, vp->line)); +#endif } /* diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 756c94555d34..0b32a7d1950c 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94 - * $Id: vfs_vnops.c,v 1.60 1998/11/02 02:36:16 peter Exp $ + * $Id: vfs_vnops.c,v 1.61 1999/01/05 18:49:56 eivind Exp $ */ #include <sys/param.h> @@ -510,10 +510,18 @@ vn_poll(fp, events, cred, p) * acquire requested lock. */ int +#ifndef DEBUG_LOCKS vn_lock(vp, flags, p) +#else +debug_vn_lock(vp, flags, p, filename, line) +#endif struct vnode *vp; int flags; struct proc *p; +#ifdef DEBUG_LOCKS + const char *filename; + int line; +#endif { int error; @@ -526,7 +534,12 @@ vn_lock(vp, flags, p) tsleep((caddr_t)vp, PINOD, "vn_lock", 0); error = ENOENT; } else { - error = VOP_LOCK(vp, flags | LK_NOPAUSE | LK_INTERLOCK, p); +#ifdef DEBUG_LOCKS + vp->filename = filename; + vp->line = line; +#endif + error = VOP_LOCK(vp, + flags | LK_NOPAUSE | LK_INTERLOCK, p); if (error == 0) return (error); } |
