]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: When delete extended partition, need to refresh pool
authorJohn Ferlan <jferlan@redhat.com>
Thu, 22 Jan 2015 16:23:10 +0000 (11:23 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 28 Jan 2015 22:28:03 +0000 (17:28 -0500)
When removing a volume that is the extended partition, all the logical
volume partitions that exist within the extended partition will also be
removed, so we need to refresh the pool to have the updated list

src/storage/storage_backend_disk.c

index 233e293dd597ed240143add36b7c17a041898b97..300aab3b73d67809e7a2acae378e18e4ef63451d 100644 (file)
@@ -654,7 +654,7 @@ virStorageBackendDiskPartBoundaries(virStoragePoolObjPtr pool,
 
 
 static int
-virStorageBackendDiskDeleteVol(virConnectPtr conn ATTRIBUTE_UNUSED,
+virStorageBackendDiskDeleteVol(virConnectPtr conn,
                                virStoragePoolObjPtr pool,
                                virStorageVolDefPtr vol,
                                unsigned int flags)
@@ -721,6 +721,15 @@ virStorageBackendDiskDeleteVol(virConnectPtr conn ATTRIBUTE_UNUSED,
             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 (vol->source.partType == VIR_STORAGE_VOL_DISK_TYPE_EXTENDED) {
+        virStoragePoolObjClearVols(pool);
+        if (virStorageBackendDiskRefreshPool(conn, pool) < 0)
+            goto cleanup;
+    }
+
     rc = 0;
  cleanup:
     VIR_FREE(devpath);