Fix raw storage volume creation for allocation < capacity.

CreateXMLFrom changes accidentally caused all raw volume creation to be
fully allocated (as though allocation == capacity). Fix this.

Also force CreateXMLFrom to maintain the previous behavior: sparseness
should still be maintained since we search for holes when copying, and the
clone behavior hasn't been tested with anything but the broken behavior.
This commit is contained in:
Cole Robinson 2009-06-22 16:33:24 +00:00
parent c1b2aea80c
commit 5ea25b7801
3 changed files with 18 additions and 1 deletions

View File

@ -1,3 +1,15 @@
Mon Jun 22 12:31:38 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/storage_backend_fs.c src/storage_driver.c:
Fix raw storage volume creation for allocation < capacity.
CreateXMLFrom changes accidentally caused all raw volume creation to be
fully allocated (as though allocation == capacity). Fix this.
Also force CreateXMLFrom to maintain the previous behavior: sparseness
should still be maintained since we search for holes when copying, and the
clone behavior hasn't been tested with anything but the broken behavior.
Mon Jun 22 11:09:18 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/test.c: Fix domain ID after redefining a running VM

View File

@ -1047,7 +1047,7 @@ static int createRaw(virConnectPtr conn,
goto cleanup;
}
remain = vol->capacity;
remain = vol->allocation;
if (inputfd != -1) {
int amtread = -1;

View File

@ -1379,6 +1379,11 @@ storageVolumeCreateXMLFrom(virStoragePoolPtr obj,
if (newvol->capacity < origvol->capacity)
newvol->capacity = origvol->capacity;
/* Make sure allocation is at least as large as the destination cap,
* to make absolutely sure we copy all possible contents */
if (newvol->allocation < origvol->capacity)
newvol->allocation = origvol->capacity;
if (!backend->buildVolFrom) {
virStorageReportError(obj->conn, VIR_ERR_NO_SUPPORT,
"%s", _("storage pool does not support volume creation from an existing volume"));