mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
storage: Need to update freeExtent at delete primary partition
Commit id '471e1c4e' only considered updating the pool if the extended partition was removed. As it turns out removing a primary partition would also need to update the freeExtent list otherwise the following sequence would fail (assuming a "fresh" disk pool for /dev/sde of 500M): $ virsh pool-info disk-pool ... Capacity: 509.88 MiB Allocation: 0.00 B Available: 509.84 MiB $ virsh vol-create-as disk-pool sde1 --capacity 300M $ virsh vol-delete --pool disk-pool sde1 $ virsh vol-create-as disk-pool sde1 --capacity 300M error: Failed to create vol sde1 error: internal error: no large enough free extent $ This patch will refresh the pool, rereading the partitions, and return
This commit is contained in:
parent
1095230dee
commit
1ffd82bb89
@ -746,10 +746,13 @@ virStorageBackendDiskDeleteVol(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* If this was the extended partition, then all the logical partitions
|
||||
* are then lost. Make it easy on ourselves and just refresh the pool
|
||||
/* If this is not a logical partition, then either we've removed an
|
||||
* extended partition or a primary partion - refresh the pool which
|
||||
* includes resetting the [n]freeExtents data so a subsequent allocation
|
||||
* might be able to use what was deleted. A logical partition is part
|
||||
* of an extended partition and handled differently
|
||||
*/
|
||||
if (vol->source.partType == VIR_STORAGE_VOL_DISK_TYPE_EXTENDED) {
|
||||
if (vol->source.partType != VIR_STORAGE_VOL_DISK_TYPE_LOGICAL) {
|
||||
virStoragePoolObjClearVols(pool);
|
||||
if (virStorageBackendDiskRefreshPool(conn, pool) < 0)
|
||||
goto cleanup;
|
||||
|
Loading…
x
Reference in New Issue
Block a user