mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-02 01:18:26 +03:00
clvmd: singlenode signals only when lock changes
There is no benefit in waking-up all the waiters when there is no actual change in lock state. This avoid some unnecessarily ping-pong effects like: Resource V_LVMTEST15724vg retrying lock in mode:WRITE... Resource V_LVMTEST15724vg already locked lockid=40, mode:WRITE Resource V_LVMTEST15724vg retrying lock in mode:WRITE... Resource V_LVMTEST15724vg already locked lockid=40, mode:WRITE
This commit is contained in:
parent
f32973c78e
commit
4459413225
@ -1,5 +1,6 @@
|
||||
Version 2.02.119 -
|
||||
==================================
|
||||
More efficient clvmd singlenode locking emulation.
|
||||
Don't skip invalidation of cached orphans if vg write lck is held (2.02.118).
|
||||
Log relevant PV tags when using cling allocation.
|
||||
Add str_list_add_list() to combine two lists.
|
||||
|
@ -208,8 +208,6 @@ static int _lock_resource(const char *resource, int mode, int flags, int *lockid
|
||||
pthread_mutex_lock(&_lock_mutex);
|
||||
|
||||
retry:
|
||||
pthread_cond_broadcast(&_lock_cond); /* to wakeup waiters */
|
||||
|
||||
if (!(head = dm_hash_lookup(_locks, resource))) {
|
||||
if (flags & LCKF_CONVERT) {
|
||||
/* In real DLM, lock is identified only by lockid, resource is not used */
|
||||
@ -269,12 +267,14 @@ retry:
|
||||
dm_list_add(head, &lck->list);
|
||||
}
|
||||
out:
|
||||
pthread_cond_broadcast(&_lock_cond); /* to wakeup waiters */
|
||||
pthread_mutex_unlock(&_lock_mutex);
|
||||
DEBUGLOG("Locked resource %s, lockid=%d, mode=%s\n",
|
||||
resource, lck->lockid, _get_mode(lck->mode));
|
||||
|
||||
return 0;
|
||||
bad:
|
||||
pthread_cond_broadcast(&_lock_cond); /* to wakeup waiters */
|
||||
pthread_mutex_unlock(&_lock_mutex);
|
||||
DEBUGLOG("Failed to lock resource %s\n", resource);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user