mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-29 15:22:30 +03:00
Always use blocking lock for VGs and orphan locks.
Because we have now strong rule for lock ordering: - VG locks must be taken in alphabetical order - ORPHAN locks must be the last vgs_locked() is now not needed. This fixes problem with orphan locking, e.g. vgremove VG1 | vgremove VG2 lock(VG1) | lock(VG2) lock(ORPHAN) | lock(ORPHAN) -> fail, non-blocking https://bugzilla.redhat.com/show_bug.cgi?id=578413 (More similar places in code.)
This commit is contained in:
parent
6733116a19
commit
d7cbaae1fd
@ -1,5 +1,6 @@
|
||||
Version 2.02.63 -
|
||||
================================
|
||||
Always use blocking lock for VGs and orphan locks.
|
||||
Allocate all segments memory from vg private mempool.
|
||||
Return newly allocated PV segment after segment split.
|
||||
Optimise PV segments search for the most last segment search case.
|
||||
|
@ -420,11 +420,9 @@ int lock_vol(struct cmd_context *cmd, const char *vol, uint32_t flags)
|
||||
switch (flags & LCK_SCOPE_MASK) {
|
||||
case LCK_VG:
|
||||
/*
|
||||
* Automatically set LCK_NONBLOCK if one or more VGs locked.
|
||||
* This will enforce correctness and prevent deadlocks rather
|
||||
* than relying on the caller to set the flag properly.
|
||||
* VG locks alphabetical, ORPHAN lock last
|
||||
*/
|
||||
if (!_blocking_supported || vgs_locked())
|
||||
if (!_blocking_supported)
|
||||
flags |= LCK_NONBLOCK;
|
||||
|
||||
if (vol[0] != '#' &&
|
||||
|
Loading…
Reference in New Issue
Block a user