mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
Update pool allocation with new values on volume creation
Since commite0139e3
, we update the pool allocation with the user-provided allocation values. For qcow2, the allocation is ignored for volume building, but we still subtracted it from pool's allocation. This can result in interesting values if the user-provided allocation is large enough: Capacity: 104.71 GiB Allocation: 109.13 GiB Available: 16.00 EiB We already do a VolRefresh on volume creation. Also refresh the volume after creating and use the new value to update the pool. https://bugzilla.redhat.com/show_bug.cgi?id=1163091 (cherry picked from commit56a4e9cb61
)
This commit is contained in:
parent
5741803ceb
commit
9a51c50048
@ -1878,8 +1878,8 @@ storageVolCreateXML(virStoragePoolPtr obj,
|
||||
* it updates the pool values.
|
||||
*/
|
||||
if (pool->def->type != VIR_STORAGE_POOL_DISK) {
|
||||
pool->def->allocation += buildvoldef->target.allocation;
|
||||
pool->def->available -= buildvoldef->target.allocation;
|
||||
pool->def->allocation += voldef->target.allocation;
|
||||
pool->def->available -= voldef->target.allocation;
|
||||
}
|
||||
|
||||
VIR_INFO("Creating volume '%s' in storage pool '%s'",
|
||||
@ -2057,25 +2057,27 @@ storageVolCreateXMLFrom(virStoragePoolPtr obj,
|
||||
origpool = NULL;
|
||||
}
|
||||
|
||||
if (buildret < 0) {
|
||||
if (buildret < 0 ||
|
||||
(backend->refreshVol &&
|
||||
backend->refreshVol(obj->conn, pool, newvol) < 0)) {
|
||||
storageVolDeleteInternal(volobj, backend, pool, newvol, 0, false);
|
||||
newvol = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
newvol = NULL;
|
||||
|
||||
/* Updating pool metadata ignoring the disk backend since
|
||||
* it updates the pool values
|
||||
*/
|
||||
if (pool->def->type != VIR_STORAGE_POOL_DISK) {
|
||||
pool->def->allocation += shadowvol->target.allocation;
|
||||
pool->def->available -= shadowvol->target.allocation;
|
||||
pool->def->allocation += newvol->target.allocation;
|
||||
pool->def->available -= newvol->target.allocation;
|
||||
}
|
||||
|
||||
VIR_INFO("Creating volume '%s' in storage pool '%s'",
|
||||
volobj->name, pool->def->name);
|
||||
ret = volobj;
|
||||
volobj = NULL;
|
||||
newvol = NULL;
|
||||
|
||||
cleanup:
|
||||
virObjectUnref(volobj);
|
||||
|
Loading…
Reference in New Issue
Block a user