diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 394e4d4553bc18798cf78a7df06cfbe5f0d37c1a..ab8675db8179db0e92c397ed4513a3a2016f1171 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1,7 +1,7 @@ /* * storage_driver.c: core driver for storage APIs * - * Copyright (C) 2006-2014 Red Hat, Inc. + * Copyright (C) 2006-2015 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or @@ -1808,9 +1808,6 @@ storageVolCreateXML(virStoragePoolPtr obj, goto cleanup; } - if (VIR_REALLOC_N(pool->volumes.objs, - pool->volumes.count+1) < 0) - goto cleanup; if (!backend->createVol) { virReportError(VIR_ERR_NO_SUPPORT, @@ -1825,14 +1822,6 @@ storageVolCreateXML(virStoragePoolPtr obj, if (backend->createVol(obj->conn, pool, voldef) < 0) goto cleanup; - pool->volumes.objs[pool->volumes.count++] = voldef; - volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, - voldef->key, NULL, NULL); - if (!volobj) { - pool->volumes.count--; - goto cleanup; - } - if (VIR_ALLOC(buildvoldef) < 0) { voldef = NULL; goto cleanup; @@ -1861,16 +1850,19 @@ storageVolCreateXML(virStoragePoolPtr obj, voldef->building = false; pool->asyncjobs--; - if (buildret < 0) { - VIR_FREE(buildvoldef); - storageVolDeleteInternal(volobj, backend, pool, voldef, - 0, false); - voldef = NULL; + if (buildret < 0) goto cleanup; - } - } + if (VIR_REALLOC_N(pool->volumes.objs, + pool->volumes.count+1) < 0) + goto cleanup; + + pool->volumes.objs[pool->volumes.count++] = voldef; + if (!(volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, + voldef->key, NULL, NULL))) + goto cleanup; + if (backend->refreshVol && backend->refreshVol(obj->conn, pool, voldef) < 0) goto cleanup;