Repository navigation
Commit 291771d
committed
kvm: hold a per-pool lock across storage pool create and delete
The refcount is atomic, but it cannot keep a pool alive on its own.
deleteStoragePool() drops the last reference and then goes on to destroy
and unmount the pool without holding anything. createStoragePool() is
serialised by KVMStoragePoolManager, but deleteStoragePool() is not, so
a create can find the still active pool and take a reference after the
delete has seen the count reach zero, and the delete then tears the pool
down underneath it.
Take a monitor per pool uuid for the whole of createStoragePool() and
deleteStoragePool(). Every delete path ends in deleteStoragePool(String),
including LibvirtStoragePool.delete(), so locking there covers callers
that bypass the manager. Pools other than the one being deleted are not
held up, which matters because a delete can sit in the five second umount
retry.
Signed-off-by: Brad House <bhouse@nexthop.ai>1 parent ac5e398 commit 291771d
2 files changed
Lines changed: 93 additions & 0 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 | |
|---|---|---|---|
| |||
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
89 | 97 | | |
90 | 98 | | |
91 | 99 | | |
| |||
808 | 816 | | |
809 | 817 | | |
810 | 818 | | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
811 | 823 | | |
812 | 824 | | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
813 | 831 | | |
814 | 832 | | |
815 | 833 | | |
| |||
981 | 999 | | |
982 | 1000 | | |
983 | 1001 | | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
984 | 1008 | | |
985 | 1009 | | |
986 | 1010 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
20 | 23 | | |
21 | 24 | | |
22 | 25 | | |
| |||
28 | 31 | | |
29 | 32 | | |
30 | 33 | | |
| 34 | + | |
31 | 35 | | |
32 | 36 | | |
33 | 37 | | |
34 | 38 | | |
35 | 39 | | |
| 40 | + | |
| 41 | + | |
36 | 42 | | |
37 | 43 | | |
38 | 44 | | |
| |||
234 | 240 | | |
235 | 241 | | |
236 | 242 | | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
237 | 306 | | |
0 commit comments