Repository navigation
Commit 7e093df
committed
kvm: take a pool's lock before the storage pool manager's
The previous commit took the per-pool lock inside
LibvirtStorageAdaptor.createStoragePool(), which is only reached through
KVMStoragePoolManager.createStoragePool(), and that is synchronized on
the manager. A create of a pool that is being torn down therefore waited
for the teardown while holding the manager wide lock. The umount retry in
deleteStoragePool() runs with no timeout, so a umount hung on storage
that has gone away held up the creates of every pool on the host, not
just the one being deleted.
Take the pool's lock in the manager first, before its own monitor, so a
create waiting for a teardown holds nothing that other pools need. The
locks move to KVMStoragePoolLocks so the manager and the adaptor share
them; the adaptor still takes the same lock, reentrantly on the create
path and on its own for deletes, including LibvirtStoragePool.delete(),
which does not go through the manager.
Signed-off-by: Brad House <bhouse@nexthop.ai>1 parent d40010d commit 7e093df
4 files changed
Lines changed: 136 additions & 15 deletions
File tree
- plugins/hypervisors/kvm/src
- main/java/com/cloud/hypervisor/kvm/storage
- test/java/com/cloud/hypervisor/kvm/storage
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
387 | 387 | | |
388 | 388 | | |
389 | 389 | | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
390 | 401 | | |
391 | | - | |
| 402 | + | |
392 | 403 | | |
393 | 404 | | |
394 | 405 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | 89 | | |
98 | 90 | | |
99 | 91 | | |
| |||
735 | 727 | | |
736 | 728 | | |
737 | 729 | | |
738 | | - | |
739 | | - | |
740 | | - | |
741 | | - | |
742 | 730 | | |
743 | 731 | | |
744 | | - | |
| 732 | + | |
745 | 733 | | |
746 | 734 | | |
747 | 735 | | |
| |||
918 | 906 | | |
919 | 907 | | |
920 | 908 | | |
921 | | - | |
| 909 | + | |
922 | 910 | | |
923 | 911 | | |
924 | 912 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
0 commit comments