[PATCH 5/5] storage: Implement 'checkPool' method for 'disk' type pools

Peter Krempa pkrempa at redhat.com
Thu Jan 20 11:45:58 UTC 2022


If 'checkPool' is not implemented, the pool will be made inactive when
restarting libvirtd and subsequently re-loading the state from the pool
state XML.

Base the 'checkPool' implementation on logic similar to 'startPool'.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1910856
Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/storage/storage_backend_disk.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c
index be8a535570..bf867491d0 100644
--- a/src/storage/storage_backend_disk.c
+++ b/src/storage/storage_backend_disk.c
@@ -476,6 +476,32 @@ virStorageBackendDiskStartPool(virStoragePoolObj *pool)
 }


+static int
+virStorageBackendDiskCheckPool(virStoragePoolObj *pool,
+                               bool *isActive)
+{
+    virStoragePoolDef *def = virStoragePoolObjGetDef(pool);
+    const char *path = def->source.devices[0].path;
+
+    *isActive = false;
+
+    if (!virFileExists(path))
+        return 0;
+
+    if (def->source.format == VIR_STORAGE_POOL_DISK_UNKNOWN)
+        def->source.format = VIR_STORAGE_POOL_DISK_DOS;
+
+    if (!virStorageBackendDeviceIsEmpty(path,
+                                        virStoragePoolFormatDiskTypeToString(def->source.format),
+                                        false))
+        return -1;
+
+    *isActive = true;
+
+    return 0;
+}
+
+
 /**
  * Write a new partition table header
  */
@@ -973,6 +999,7 @@ virStorageBackend virStorageBackendDisk = {
     .buildPool = virStorageBackendDiskBuildPool,
     .refreshPool = virStorageBackendDiskRefreshPool,
     .deletePool = virStorageBackendDiskDeletePool,
+    .checkPool = virStorageBackendDiskCheckPool,

     .createVol = virStorageBackendDiskCreateVol,
     .deleteVol = virStorageBackendDiskDeleteVol,
-- 
2.34.1




More information about the libvir-list mailing list