LVM operations can take significant amount of time. This is especially visible when stopping a VM (`vm.storage.stop()`) - in that time the whole qubesd freeze for about 2 seconds. Fix this by making all the ThinVolume methods a coroutines (where supported). Each public coroutine is also wrapped with locking on volume._lock to avoid concurrency-related problems. This all also require changing internal helper functions to coroutines. There are two functions that still needs to be called from non-coroutine call sites: - init_cache/reset_cache (initial cache fill, ThinPool.setup()) - qubes_lvm (ThinVolume.export() So, those two functions need to live in two variants. Extract its common code to separate functions to reduce code duplications. Fixes QubesOS/qubes-issues#4283 |
||
|---|---|---|
| .. | ||
| integ | ||
| tools | ||
| vm | ||
| __init__.py | ||
| api_admin.py | ||
| api_misc.py | ||
| api.py | ||
| app.py | ||
| devices_block.py | ||
| devices.py | ||
| events.py | ||
| ext.py | ||
| extra.py | ||
| firewall.py | ||
| init.py | ||
| run.py | ||
| storage_file.py | ||
| storage_kernels.py | ||
| storage_lvm.py | ||
| storage_reflink.py | ||
| storage.py | ||
| tarwriter.py | ||