diff options
author | jeff <jeff@FreeBSD.org> | 2003-02-25 03:37:48 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2003-02-25 03:37:48 +0000 |
commit | 9e4c9a6ce908881b1e6f83cbb906a9fce08dd3ab (patch) | |
tree | df5eb5e550ba49b92f45eadaca861cb18128ad5d /sys/kern/kern_lock.c | |
parent | 541937cf7373ff6a61c871266ea041503bb02233 (diff) | |
download | FreeBSD-src-9e4c9a6ce908881b1e6f83cbb906a9fce08dd3ab.zip FreeBSD-src-9e4c9a6ce908881b1e6f83cbb906a9fce08dd3ab.tar.gz |
- Add an interlock argument to BUF_LOCK and BUF_TIMELOCK.
- Remove the buftimelock mutex and acquire the buf's interlock to protect
these fields instead.
- Hold the vnode interlock while locking bufs on the clean/dirty queues.
This reduces some cases from one BUF_LOCK with a LK_NOWAIT and another
BUF_LOCK with a LK_TIMEFAIL to a single lock.
Reviewed by: arch, mckusick
Diffstat (limited to 'sys/kern/kern_lock.c')
-rw-r--r-- | sys/kern/kern_lock.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index aaf09aa..6ee1c5c 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -232,19 +232,16 @@ debuglockmgr(lkp, flags, interlkp, td, name, file, line) else thr = td; - if ((flags & (LK_NOWAIT|LK_RELEASE)) == 0) { - if ((flags & LK_INTERLOCK) == 0) - WITNESS_SLEEP(1, NULL); - else - WITNESS_SLEEP(1, &interlkp->mtx_object); - } - - mtx_lock(lkp->lk_interlock); + if ((flags & LK_INTERNAL) == 0) + mtx_lock(lkp->lk_interlock); if (flags & LK_INTERLOCK) { mtx_assert(interlkp, MA_OWNED | MA_NOTRECURSED); mtx_unlock(interlkp); } + if ((flags & (LK_NOWAIT|LK_RELEASE)) == 0) + WITNESS_SLEEP(1, &lkp->lk_interlock->mtx_object); + if (panicstr != NULL) { mtx_unlock(lkp->lk_interlock); return (0); |