svn commit: r332879 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Mon Apr 23 07:52:11 UTC 2018
Author: mjg
Date: Mon Apr 23 07:52:10 2018
New Revision: 332879
URL: https://svnweb.freebsd.org/changeset/base/332879
Log:
lockf: skip the hard work in lf_purgelocks if possible
Tested by: pho
Modified:
head/sys/kern/kern_lockf.c
Modified: head/sys/kern/kern_lockf.c
==============================================================================
--- head/sys/kern/kern_lockf.c Mon Apr 23 07:51:19 2018 (r332878)
+++ head/sys/kern/kern_lockf.c Mon Apr 23 07:52:10 2018 (r332879)
@@ -777,6 +777,12 @@ lf_purgelocks(struct vnode *vp, struct lockf **statep)
return;
}
*statep = NULL;
+ if (LIST_EMPTY(&state->ls_active) && state->ls_threads == 0) {
+ KASSERT(LIST_EMPTY(&state->ls_pending),
+ ("freeing state with pending locks"));
+ VI_UNLOCK(vp);
+ goto out_free;
+ }
state->ls_threads++;
VI_UNLOCK(vp);
@@ -823,6 +829,7 @@ lf_purgelocks(struct vnode *vp, struct lockf **statep)
LIST_REMOVE(lock, lf_link);
lf_free_lock(lock);
}
+out_free:
sx_xlock(&lf_lock_states_lock);
LIST_REMOVE(state, ls_link);
sx_xunlock(&lf_lock_states_lock);
More information about the svn-src-head
mailing list