mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
storage: When delete volume avoid disk backend removal
For a disk backend, the deleteVol code will clear all the volumes in the pool and perform a pool refresh, thus the storageVolDeleteInternal should not use access @voldef after deleteVol succeeds.
This commit is contained in:
parent
b427cf4831
commit
ec24d2905b
@ -1670,15 +1670,21 @@ storageVolDeleteInternal(virStorageVolPtr vol,
|
||||
if (backend->deleteVol(vol->conn, obj, voldef, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* The disk backend updated the pool data including removing the
|
||||
* voldef from the pool (for both the deleteVol and the createVol
|
||||
* failure path. */
|
||||
if (def->type == VIR_STORAGE_POOL_DISK) {
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Update pool metadata - don't update meta data from error paths
|
||||
* in this module since the allocation/available weren't adjusted yet.
|
||||
* Ignore the disk backend since it updates the pool values.
|
||||
*/
|
||||
if (updateMeta) {
|
||||
if (def->type != VIR_STORAGE_POOL_DISK) {
|
||||
def->allocation -= voldef->target.allocation;
|
||||
def->available += voldef->target.allocation;
|
||||
}
|
||||
def->allocation -= voldef->target.allocation;
|
||||
def->available += voldef->target.allocation;
|
||||
}
|
||||
|
||||
virStoragePoolObjRemoveVol(obj, voldef);
|
||||
|
Loading…
x
Reference in New Issue
Block a user