2 x quad-core system is slower that 2 x dual core on FreeBSD
Kris Kennaway
kris at FreeBSD.org
Tue Nov 20 14:41:26 PST 2007
Kris Kennaway wrote:
> Kris Kennaway wrote:
>> In the meantime there is unfortunately not a lot that can be done,
>> AFAICT. There is one hack that I will send you later but it is not
>> likely to help much. I will also think about how to track down the
>> cause of the contention further (the profiling trace only shows that
>> it comes mostly from vget/vput but doesn't show where these are called
>> from).
>
> Actually this patch might help. It doesn't replace lockmgr but it does
> fix a silly thundering herd behaviour. It probably needs some
> adjustment to get it to apply cleanly (it is about 7 months old), and I
> apparently stopped using it because I ran into deadlocks. It might be
> stable enough to at least see how much it helps.
>
> Set the vfs.lookup_shared=1 sysctl to enable the other half of the patch.
>
> Kris
>
Try this one instead, it applies to HEAD. You'll need to manually enter
the paths though because of how p4 mangles diffs.
Kris
-------------- next part --------------
==== //depot/user/kris/contention/sys/kern/kern_lock.c#10 - /zoo/kris/contention/kern/kern_lock.c ====
@@ -109,7 +109,6 @@
#define LK_ALL (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | \
LK_SHARE_NONZERO | LK_WAIT_NONZERO)
-static int acquire(struct lock **lkpp, int extflags, int wanted, int *contested, uint64_t *waittime);
static int acquiredrain(struct lock *lkp, int extflags) ;
static __inline void
@@ -126,61 +125,17 @@
COUNT(td, -decr);
if (lkp->lk_sharecount == decr) {
- lkp->lk_flags &= ~LK_SHARE_NONZERO;
- if (lkp->lk_flags & (LK_WANT_UPGRADE | LK_WANT_EXCL)) {
- wakeup(lkp);
- }
+ if (lkp->lk_exclusivewait != 0)
+ wakeup_one(&lkp->lk_exclusivewait);
lkp->lk_sharecount = 0;
} else {
lkp->lk_sharecount -= decr;
+ if (lkp->lk_sharecount == 1 && lkp->lk_flags & LK_WANT_UPGRADE)
+ wakeup(&lkp->lk_flags);
}
}
-static int
-acquire(struct lock **lkpp, int extflags, int wanted, int *contested, uint64_t *waittime)
-{
- struct lock *lkp = *lkpp;
- int error;
- CTR3(KTR_LOCK,
- "acquire(): lkp == %p, extflags == 0x%x, wanted == 0x%x",
- lkp, extflags, wanted);
- if ((extflags & LK_NOWAIT) && (lkp->lk_flags & wanted))
- return EBUSY;
- error = 0;
- if ((lkp->lk_flags & wanted) != 0)
- lock_profile_obtain_lock_failed(&lkp->lk_object, contested, waittime);
-
- while ((lkp->lk_flags & wanted) != 0) {
- CTR2(KTR_LOCK,
- "acquire(): lkp == %p, lk_flags == 0x%x sleeping",
- lkp, lkp->lk_flags);
- lkp->lk_flags |= LK_WAIT_NONZERO;
- lkp->lk_waitcount++;
- error = msleep(lkp, lkp->lk_interlock, lkp->lk_prio,
- lkp->lk_wmesg,
- ((extflags & LK_TIMELOCK) ? lkp->lk_timo : 0));
- lkp->lk_waitcount--;
- if (lkp->lk_waitcount == 0)
- lkp->lk_flags &= ~LK_WAIT_NONZERO;
- if (error)
- break;
- if (extflags & LK_SLEEPFAIL) {
- error = ENOLCK;
- break;
- }
- if (lkp->lk_newlock != NULL) {
- mtx_lock(lkp->lk_newlock->lk_interlock);
- mtx_unlock(lkp->lk_interlock);
- if (lkp->lk_waitcount == 0)
- wakeup((void *)(&lkp->lk_newlock));
- *lkpp = lkp = lkp->lk_newlock;
- }
- }
- mtx_assert(lkp->lk_interlock, MA_OWNED);
- return (error);
-}
-
/*
* Set, change, or release a lock.
*
@@ -189,16 +144,16 @@
* accepted shared locks and shared-to-exclusive upgrades to go away.
*/
int
-_lockmgr(struct lock *lkp, u_int flags, struct mtx *interlkp,
- struct thread *td, char *file, int line)
-
+lockmgr(lkp, flags, interlkp, td)
+ struct lock *lkp;
+ u_int flags;
+ struct mtx *interlkp;
+ struct thread *td;
{
int error;
struct thread *thr;
- int extflags, lockflags;
- int contested = 0;
- uint64_t waitstart = 0;
-
+ int extflags;
+
error = 0;
if (td == NULL)
thr = LK_KERNPROC;
@@ -226,7 +181,7 @@
if ((flags & (LK_NOWAIT|LK_RELEASE)) == 0)
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK,
- &lkp->lk_interlock->lock_object,
+ &lkp->lk_interlock->mtx_object,
"Acquiring lockmgr lock \"%s\"", lkp->lk_wmesg);
if (panicstr != NULL) {
@@ -253,16 +208,30 @@
* lock itself ).
*/
if (lkp->lk_lockholder != thr) {
- lockflags = LK_HAVE_EXCL;
- if (td != NULL && !(td->td_pflags & TDP_DEADLKTREAT))
- lockflags |= LK_WANT_EXCL | LK_WANT_UPGRADE;
- error = acquire(&lkp, extflags, lockflags, &contested, &waitstart);
- if (error)
+
+ while (lkp->lk_exclusivecount != 0 /* ||
+ (!(td->td_pflags & TDP_DEADLKTREAT) &&
+ (lkp->lk_flags & LK_WANT_UPGRADE)) */) {
+ lkp->lk_sharewait++;
+ error = msleep(&lkp->lk_sharewait, lkp->lk_interlock,
+ lkp->lk_prio,lkp->lk_wmesg,
+ ((extflags & LK_TIMELOCK) ? lkp->lk_timo : 0));
+
+ if (error)
+ break;
+ if (extflags & LK_SLEEPFAIL) {
+ error = ENOLCK;
+ break;
+ }
+
+ lkp->lk_sharewait--;
+ }
+
+ if (error != 0) {
+ shareunlock(td,lkp,0);
break;
+ }
sharelock(td, lkp, 1);
- if (lkp->lk_sharecount == 1)
- lock_profile_obtain_lock_success(&lkp->lk_object, contested, waitstart, file, line);
-
#if defined(DEBUG_LOCKS)
stack_save(&lkp->lk_stack);
#endif
@@ -273,8 +242,6 @@
* An alternative would be to fail with EDEADLK.
*/
sharelock(td, lkp, 1);
- if (lkp->lk_sharecount == 1)
- lock_profile_obtain_lock_success(&lkp->lk_object, contested, waitstart, file, line);
/* FALLTHROUGH downgrade */
case LK_DOWNGRADE:
@@ -285,10 +252,9 @@
sharelock(td, lkp, lkp->lk_exclusivecount);
COUNT(td, -lkp->lk_exclusivecount);
lkp->lk_exclusivecount = 0;
- lkp->lk_flags &= ~LK_HAVE_EXCL;
lkp->lk_lockholder = LK_NOPROC;
- if (lkp->lk_waitcount)
- wakeup((void *)lkp);
+ if (lkp->lk_sharewait)
+ wakeup((void *)&lkp->lk_sharewait);
break;
case LK_EXCLUPGRADE:
@@ -317,15 +283,13 @@
panic("lockmgr: upgrade exclusive lock");
if (lkp->lk_sharecount <= 0)
panic("lockmgr: upgrade without shared");
- shareunlock(td, lkp, 1);
- if (lkp->lk_sharecount == 0)
- lock_profile_release_lock(&lkp->lk_object);
/*
* If we are just polling, check to see if we will block.
*/
if ((extflags & LK_NOWAIT) &&
((lkp->lk_flags & LK_WANT_UPGRADE) ||
lkp->lk_sharecount > 1)) {
+ shareunlock(td, lkp, 1);
error = EBUSY;
break;
}
@@ -336,34 +300,43 @@
* drop to zero, then take exclusive lock.
*/
lkp->lk_flags |= LK_WANT_UPGRADE;
- error = acquire(&lkp, extflags, LK_SHARE_NONZERO, &contested, &waitstart);
+
+ while(lkp->lk_sharecount != 1) {
+
+ error = msleep(&lkp->lk_flags, lkp->lk_interlock,
+ lkp->lk_prio,lkp->lk_wmesg,
+ ((extflags & LK_TIMELOCK) ? lkp->lk_timo : 0));
+
+ if (error)
+ break;
+ if (extflags & LK_SLEEPFAIL) {
+ error = ENOLCK;
+ break;
+ }
+ }
+
lkp->lk_flags &= ~LK_WANT_UPGRADE;
if (error) {
- if ((lkp->lk_flags & ( LK_WANT_EXCL | LK_WAIT_NONZERO)) == (LK_WANT_EXCL | LK_WAIT_NONZERO))
- wakeup((void *)lkp);
+ shareunlock(td, lkp, 1);
+ if (lkp->lk_sharewait)
+ wakeup(&lkp->lk_sharewait);
break;
}
+
if (lkp->lk_exclusivecount != 0)
panic("lockmgr: non-zero exclusive count");
- lkp->lk_flags |= LK_HAVE_EXCL;
lkp->lk_lockholder = thr;
lkp->lk_exclusivecount = 1;
+ lkp->lk_sharecount = 0;
COUNT(td, 1);
- lock_profile_obtain_lock_success(&lkp->lk_object, contested, waitstart, file, line);
#if defined(DEBUG_LOCKS)
stack_save(&lkp->lk_stack);
#endif
break;
}
- /*
- * Someone else has requested upgrade. Release our shared
- * lock, awaken upgrade requestor if we are the last shared
- * lock, then request an exclusive lock.
- */
- if ( (lkp->lk_flags & (LK_SHARE_NONZERO|LK_WAIT_NONZERO)) ==
- LK_WAIT_NONZERO)
- wakeup((void *)lkp);
+
+ shareunlock(td, lkp, 1);
/* FALLTHROUGH exclusive request */
case LK_EXCLUSIVE:
@@ -379,38 +352,52 @@
break;
}
}
- /*
- * If we are just polling, check to see if we will sleep.
- */
- if ((extflags & LK_NOWAIT) &&
- (lkp->lk_flags & (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | LK_SHARE_NONZERO))) {
- error = EBUSY;
- break;
+
+
+ if (lkp->lk_exclusivecount != 0 || lkp->lk_sharecount != 0) {
+
+
+ /*
+ * If we are just polling, check to see if we will sleep.
+ */
+ if (extflags & LK_NOWAIT) {
+ error = EBUSY;
+ break;
+ }
+
+ lkp->lk_exclusivewait++;
+
+ while(lkp->lk_exclusivecount != 0 || lkp->lk_sharecount != 0) {
+ error = msleep(&lkp->lk_exclusivewait, lkp->lk_interlock,
+ lkp->lk_prio,lkp->lk_wmesg,
+ ((extflags & LK_TIMELOCK) ? lkp->lk_timo : 0));
+
+ if (error)
+ break;
+ if (extflags & LK_SLEEPFAIL) {
+ error = ENOLCK;
+ break;
+ }
+
+ }
+ lkp->lk_exclusivewait--;
+
+ if(error) {
+ if (lkp->lk_exclusivewait != 0)
+ wakeup(&lkp->lk_exclusivewait);
+ else if (lkp->lk_sharewait != 0)
+ wakeup(&lkp->lk_sharewait);
+
+ break;
+ }
}
- /*
- * Try to acquire the want_exclusive flag.
- */
- error = acquire(&lkp, extflags, (LK_HAVE_EXCL | LK_WANT_EXCL), &contested, &waitstart);
- if (error)
- break;
- lkp->lk_flags |= LK_WANT_EXCL;
- /*
- * Wait for shared locks and upgrades to finish.
- */
- error = acquire(&lkp, extflags, LK_HAVE_EXCL | LK_WANT_UPGRADE | LK_SHARE_NONZERO, &contested, &waitstart);
- lkp->lk_flags &= ~LK_WANT_EXCL;
- if (error) {
- if (lkp->lk_flags & LK_WAIT_NONZERO)
- wakeup((void *)lkp);
- break;
- }
- lkp->lk_flags |= LK_HAVE_EXCL;
+
+
lkp->lk_lockholder = thr;
if (lkp->lk_exclusivecount != 0)
panic("lockmgr: non-zero exclusive count");
lkp->lk_exclusivecount = 1;
COUNT(td, 1);
- lock_profile_obtain_lock_success(&lkp->lk_object, contested, waitstart, file, line);
#if defined(DEBUG_LOCKS)
stack_save(&lkp->lk_stack);
#endif
@@ -427,23 +414,21 @@
if (lkp->lk_lockholder != LK_KERNPROC)
COUNT(td, -1);
if (lkp->lk_exclusivecount == 1) {
- lkp->lk_flags &= ~LK_HAVE_EXCL;
lkp->lk_lockholder = LK_NOPROC;
lkp->lk_exclusivecount = 0;
- lock_profile_release_lock(&lkp->lk_object);
+ if (lkp->lk_sharewait)
+ wakeup(&lkp->lk_sharewait);
+ else if (lkp->lk_exclusivewait)
+ wakeup_one(&lkp->lk_exclusivewait);
} else {
lkp->lk_exclusivecount--;
}
- } else if (lkp->lk_flags & LK_SHARE_NONZERO)
+ } else if (lkp->lk_sharecount != 0)
shareunlock(td, lkp, 1);
- else {
- printf("lockmgr: thread %p unlocking unheld lock\n",
- thr);
- kdb_backtrace();
- }
-
- if (lkp->lk_flags & LK_WAIT_NONZERO)
- wakeup((void *)lkp);
+ else
+ panic("lockmgr: thread %p, not holding a lock",
+ thr);
+
break;
case LK_DRAIN:
@@ -459,7 +444,7 @@
error = acquiredrain(lkp, extflags);
if (error)
break;
- lkp->lk_flags |= LK_DRAINING | LK_HAVE_EXCL;
+ lkp->lk_flags |= LK_DRAINING;
lkp->lk_lockholder = thr;
lkp->lk_exclusivecount = 1;
COUNT(td, 1);
@@ -475,8 +460,10 @@
/* NOTREACHED */
}
if ((lkp->lk_flags & LK_WAITDRAIN) &&
- (lkp->lk_flags & (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE |
- LK_SHARE_NONZERO | LK_WAIT_NONZERO)) == 0) {
+ (lkp->lk_sharewait == 0) &&
+ (lkp->lk_exclusivewait == 0) &&
+ (lkp->lk_sharecount== 0) &&
+ (lkp->lk_exclusivecount== 0)) {
lkp->lk_flags &= ~LK_WAITDRAIN;
wakeup((void *)&lkp->lk_flags);
}
@@ -488,10 +475,14 @@
acquiredrain(struct lock *lkp, int extflags) {
int error;
- if ((extflags & LK_NOWAIT) && (lkp->lk_flags & LK_ALL)) {
- return EBUSY;
- }
- while (lkp->lk_flags & LK_ALL) {
+
+ while ((lkp->lk_sharecount != 0) ||
+ (lkp->lk_sharewait != 0) ||
+ (lkp->lk_exclusivecount != 0) ||
+ (lkp->lk_exclusivewait != 0)) {
+
+ if (extflags & LK_NOWAIT) return EBUSY;
+
lkp->lk_flags |= LK_WAITDRAIN;
error = msleep(&lkp->lk_flags, lkp->lk_interlock, lkp->lk_prio,
lkp->lk_wmesg,
@@ -505,34 +496,7 @@
return 0;
}
-/*
- * Transfer any waiting processes from one lock to another.
- */
-void
-transferlockers(from, to)
- struct lock *from;
- struct lock *to;
-{
- KASSERT(from != to, ("lock transfer to self"));
- KASSERT((from->lk_flags&LK_WAITDRAIN) == 0, ("transfer draining lock"));
-
- mtx_lock(from->lk_interlock);
- if (from->lk_waitcount == 0) {
- mtx_unlock(from->lk_interlock);
- return;
- }
- from->lk_newlock = to;
- wakeup((void *)from);
- msleep(&from->lk_newlock, from->lk_interlock, from->lk_prio,
- "lkxfer", 0);
- from->lk_newlock = NULL;
- from->lk_flags &= ~(LK_WANT_EXCL | LK_WANT_UPGRADE);
- KASSERT(from->lk_waitcount == 0, ("active lock"));
- mtx_unlock(from->lk_interlock);
-}
-
-
/*
* Initialize a lock; required before use.
*/
@@ -550,12 +514,13 @@
lkp->lk_interlock = mtx_pool_alloc(mtxpool_lockbuilder);
lkp->lk_flags = (flags & LK_EXTFLG_MASK);
lkp->lk_sharecount = 0;
- lkp->lk_waitcount = 0;
+ lkp->lk_sharewait = 0;
lkp->lk_exclusivecount = 0;
+ lkp->lk_exclusivewait = 0;
lkp->lk_prio = prio;
lkp->lk_timo = timo;
+ lkp->lk_wmesg = wmesg;
lkp->lk_lockholder = LK_NOPROC;
- lkp->lk_newlock = NULL;
#ifdef DEBUG_LOCKS
stack_zero(&lkp->lk_stack);
#endif
@@ -614,7 +579,8 @@
int count;
mtx_lock(lkp->lk_interlock);
- count = lkp->lk_exclusivecount + lkp->lk_sharecount;
+ count = lkp->lk_exclusivecount +
+ lkp->lk_sharecount;
mtx_unlock(lkp->lk_interlock);
return (count);
}
@@ -629,7 +595,9 @@
int count;
mtx_lock(lkp->lk_interlock);
- count = lkp->lk_waitcount;
+ count = lkp->lk_exclusivewait +
+ lkp->lk_sharewait +
+ (lkp->lk_flags & LK_WANT_UPGRADE) ? 1 : 0;
mtx_unlock(lkp->lk_interlock);
return (count);
}
@@ -646,12 +614,14 @@
if (lkp->lk_sharecount)
printf(" lock type %s: SHARED (count %d)", lkp->lk_wmesg,
lkp->lk_sharecount);
- else if (lkp->lk_flags & LK_HAVE_EXCL)
+ else if (lkp->lk_exclusivecount)
printf(" lock type %s: EXCL (count %d) by thread %p (pid %d)",
lkp->lk_wmesg, lkp->lk_exclusivecount,
lkp->lk_lockholder, lkp->lk_lockholder->td_proc->p_pid);
- if (lkp->lk_waitcount > 0)
- printf(" with %d pending", lkp->lk_waitcount);
+ if (lkp->lk_sharewait > 0)
+ printf(" with %d pending readers", lkp->lk_sharewait);
+ if (lkp->lk_exclusivewait > 0)
+ printf(" with %d pending writers", lkp->lk_exclusivewait);
#ifdef DEBUG_LOCKS
stack_print(&lkp->lk_stack);
#endif
@@ -671,24 +641,9 @@
lkp = td->td_wchan;
/* Simple test to see if wchan points to a lockmgr lock. */
- if (LOCK_CLASS(&lkp->lk_object) == &lock_class_lockmgr &&
- lkp->lk_wmesg == td->td_wmesg)
- goto ok;
+ if (lkp->lk_wmesg != td->td_wmesg)
+ return (0);
- /*
- * If this thread is doing a DRAIN, then it would be asleep on
- * &lkp->lk_flags rather than lkp.
- */
- lkp = (struct lock *)((char *)td->td_wchan -
- offsetof(struct lock, lk_flags));
- if (LOCK_CLASS(&lkp->lk_object) == &lock_class_lockmgr &&
- lkp->lk_wmesg == td->td_wmesg && (lkp->lk_flags & LK_WAITDRAIN))
- goto ok;
-
- /* Doen't seem to be a lockmgr lock. */
- return (0);
-
-ok:
/* Ok, we think we have a lockmgr lock, so output some details. */
db_printf("blocked on lk \"%s\" ", lkp->lk_wmesg);
if (lkp->lk_sharecount) {
@@ -701,7 +656,7 @@
return (1);
}
-void
+static void
db_show_lockmgr(struct lock_object *lock)
{
struct thread *td;
@@ -709,18 +664,20 @@
lkp = (struct lock *)lock;
- db_printf(" lock type: %s\n", lkp->lk_wmesg);
- db_printf(" state: ");
+ db_printf("lock type: %s\n", lkp->lk_wmesg);
+ db_printf("state: ");
if (lkp->lk_sharecount)
db_printf("SHARED (count %d)\n", lkp->lk_sharecount);
- else if (lkp->lk_flags & LK_HAVE_EXCL) {
+ else if (lkp->lk_exclusivecount != 0) {
td = lkp->lk_lockholder;
db_printf("EXCL (count %d) %p ", lkp->lk_exclusivecount, td);
db_printf("(tid %d, pid %d, \"%s\")\n", td->td_tid,
td->td_proc->p_pid, td->td_proc->p_comm);
} else
db_printf("UNLOCKED\n");
- if (lkp->lk_waitcount > 0)
- db_printf(" waiters: %d\n", lkp->lk_waitcount);
+ if (lkp->lk_sharewait > 0)
+ db_printf("waiters shared: %d\n", lkp->lk_sharewait);
+ if (lkp->lk_exclusivewait > 0)
+ db_printf("waiters exclusive: %d\n", lkp->lk_exclusivewait);
}
#endif
==== //depot/user/kris/contention/sys/kern/subr_lock.c#14 - /zoo/kris/contention/kern/subr_lock.c ====
@@ -59,7 +59,6 @@
&lock_class_sx,
&lock_class_rm,
&lock_class_rw,
- &lock_class_lockmgr,
};
#ifdef LOCK_PROFILING
==== //depot/user/kris/contention/sys/kern/vfs_default.c#6 - /zoo/kris/contention/kern/vfs_default.c ====
@@ -263,7 +263,7 @@
{
struct vnode *vp = ap->a_vp;
- return (_lockmgr(vp->v_vnlock, ap->a_flags, VI_MTX(vp), ap->a_td, ap->a_file, ap->a_line));
+ return (lockmgr(vp->v_vnlock, ap->a_flags, VI_MTX(vp), ap->a_td));
}
/* See above. */
==== //depot/user/kris/contention/sys/sys/lockmgr.h#6 - /zoo/kris/contention/sys/lockmgr.h ====
@@ -51,23 +51,23 @@
* can be gained.
*/
struct lock {
- struct lock_object lk_object; /* common lock properties */
+ struct lock_object lk_object; /* common lock properties */
struct mtx *lk_interlock; /* lock on remaining fields */
u_int lk_flags; /* see below */
int lk_sharecount; /* # of accepted shared locks */
- int lk_waitcount; /* # of processes sleeping for lock */
- short lk_exclusivecount; /* # of recursive exclusive locks */
+ int lk_sharewait; /* # waiting for shared locks */
+ int lk_exclusivecount; /* # of recursive exclusive locks */
+ int lk_exclusivewait; /* # of recursive exclusive locks */
+
short lk_prio; /* priority at which to sleep */
+ const char *lk_wmesg; /* resource sleeping (for tsleep) */
int lk_timo; /* maximum sleep time (for tsleep) */
struct thread *lk_lockholder; /* thread of exclusive lock holder */
- struct lock *lk_newlock; /* lock taking over this lock */
-
+
#ifdef DEBUG_LOCKS
struct stack lk_stack;
#endif
};
-
-#define lk_wmesg lk_object.lo_name
/*
* Lock request types:
* LK_SHARED - get one of many possible shared locks. If a process
@@ -202,15 +202,13 @@
int timo, int flags);
void lockdestroy(struct lock *);
-int _lockmgr(struct lock *, u_int flags,
- struct mtx *, struct thread *p, char *file, int line);
+int lockmgr(struct lock *, u_int flags,
+ struct mtx *, struct thread *p);
void transferlockers(struct lock *, struct lock *);
void lockmgr_printinfo(struct lock *);
int lockstatus(struct lock *, struct thread *);
int lockcount(struct lock *);
int lockwaiters(struct lock *);
-
-#define lockmgr(lock, flags, mtx, td) _lockmgr((lock), (flags), (mtx), (td), __FILE__, __LINE__)
#ifdef DDB
int lockmgr_chain(struct thread *td, struct thread **ownerp);
#endif
==== //depot/user/kris/contention/sys/ufs/ffs/ffs_vnops.c#13 - /zoo/kris/contention/ufs/ffs/ffs_vnops.c ====
@@ -371,7 +371,7 @@
flags |= LK_INTERLOCK;
}
lkp = vp->v_vnlock;
- result = _lockmgr(lkp, flags, VI_MTX(vp), ap->a_td, ap->a_file, ap->a_line);
+ result = lockmgr(lkp, flags, VI_MTX(vp), ap->a_td);
if (lkp == vp->v_vnlock || result != 0)
break;
/*
@@ -382,7 +382,7 @@
* right lock. Release it, and try to get the
* new lock.
*/
- (void) _lockmgr(lkp, LK_RELEASE, VI_MTX(vp), ap->a_td, ap->a_file, ap->a_line);
+ (void) lockmgr(lkp, LK_RELEASE, VI_MTX(vp), ap->a_td);
if ((flags & LK_TYPE_MASK) == LK_UPGRADE)
flags = (flags & ~LK_TYPE_MASK) | LK_EXCLUSIVE;
flags &= ~LK_INTERLOCK;
More information about the freebsd-stable
mailing list