]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: block: Extract logic decision when to use a separate 'raw' layer for slice
authorPeter Krempa <pkrempa@redhat.com>
Thu, 19 Mar 2020 15:43:49 +0000 (16:43 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 20 Mar 2020 08:47:16 +0000 (09:47 +0100)
Introduce qemuBlockStorageSourceNeedsStorageSliceLayer which will hold
the decision logic and fix all places that open-code it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_block.c
src/qemu/qemu_block.h
src/qemu/qemu_domain.c

index 4ed17b6df386cf4ba71376565f52108ea757ada7..b5b34ab4419fe4f12d5b8a4d653b2bfec8799715 100644 (file)
@@ -1446,8 +1446,7 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSourcePtr src,
     g_autoptr(virJSONValue) props = NULL;
     const char *storagenode = src->nodestorage;
 
-    if (src->sliceStorage &&
-        src->format != VIR_STORAGE_FILE_RAW)
+    if (qemuBlockStorageSourceNeedsStorageSliceLayer(src))
         storagenode = src->sliceStorage->nodename;
 
     if (!(props = qemuBlockStorageSourceGetBlockdevFormatProps(src)))
@@ -1568,7 +1567,7 @@ qemuBlockStorageSourceAttachPrepareBlockdev(virStorageSourcePtr src,
     data->storageNodeName = src->nodestorage;
     data->formatNodeName = src->nodeformat;
 
-    if (src->sliceStorage && src->format != VIR_STORAGE_FILE_RAW) {
+    if (qemuBlockStorageSourceNeedsStorageSliceLayer(src)) {
         if (!(data->storageSliceProps = qemuBlockStorageSourceGetBlockdevStorageSliceProps(src)))
             return NULL;
 
@@ -3308,3 +3307,22 @@ qemuBlockReopenReadOnly(virDomainObjPtr vm,
 
     return 0;
 }
+
+/**
+ * qemuBlockStorageSourceNeedSliceLayer:
+ * @src: source to inspect
+ *
+ * Returns true if @src requires an extra 'raw' layer for handling of the storage
+ * slice.
+ */
+bool
+qemuBlockStorageSourceNeedsStorageSliceLayer(const virStorageSource *src)
+{
+    if (!src->sliceStorage)
+        return false;
+
+    if (src->format != VIR_STORAGE_FILE_RAW)
+        return true;
+
+    return false;
+}
index 75b25bfea5b3e924acfaa693ad09e14480f8d63c..28475b25c14a8494001b3373ff328232ef8397d9 100644 (file)
@@ -254,3 +254,6 @@ int
 qemuBlockReopenReadOnly(virDomainObjPtr vm,
                         virStorageSourcePtr src,
                         qemuDomainAsyncJob asyncJob);
+
+bool
+qemuBlockStorageSourceNeedsStorageSliceLayer(const virStorageSource *src);
index 6b70f457ca175f7faefda103630236c9b9011e9f..b67ec23a362a7d3b91165ceece42de2be8ab81b4 100644 (file)
@@ -16591,8 +16591,7 @@ qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
     src->nodestorage = g_strdup_printf("libvirt-%u-storage", src->id);
     src->nodeformat = g_strdup_printf("libvirt-%u-format", src->id);
 
-    if (src->sliceStorage &&
-        src->format != VIR_STORAGE_FILE_RAW)
+    if (qemuBlockStorageSourceNeedsStorageSliceLayer(src))
         src->sliceStorage->nodename = g_strdup_printf("libvirt-%u-slice-sto", src->id);
 
     if (qemuDomainValidateStorageSource(src, priv->qemuCaps) < 0)