diff options
Diffstat (limited to 'daemons/clvmd/lvm-functions.c')
-rw-r--r-- | daemons/clvmd/lvm-functions.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c index 1fa23483..81e8b884 100644 --- a/daemons/clvmd/lvm-functions.c +++ b/daemons/clvmd/lvm-functions.c @@ -240,9 +240,17 @@ static int hold_lock(char *resource, int mode, int flags) lvi = lookup_info(resource); - if (lvi && lvi->lock_mode == mode) { - DEBUGLOG("hold_lock, lock mode %d already held\n", mode); - return 0; + if (lvi) { + if (lvi->lock_mode == mode) { + DEBUGLOG("hold_lock, lock mode %d already held\n", + mode); + return 0; + } + if ((lvi->lock_mode == LCK_EXCL) && (mode == LCK_WRITE)) { + DEBUGLOG("hold_lock, lock already held LCK_EXCL, " + "ignoring LCK_WRITE request"); + return 0; + } } /* Only allow explicit conversions */ |