]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuBlockStorageSourceChainData: Add handling of 'copy-on-read' filter layer
authorPeter Krempa <pkrempa@redhat.com>
Fri, 7 May 2021 12:48:02 +0000 (14:48 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 24 May 2021 18:38:08 +0000 (20:38 +0200)
qemuBlockStorageSourceChainData encapsulates the backend of the disk for
startup and hotplug operations. Add the handling for the copy-on-read
filter so that the hotplug code doesn't need to have separate cleanup.

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

index 89f20eb1d2d9cfdafad3fd263271f7308ea8cf44..6627d044cd66ed3e95035ab8deec0bde57daa783 100644 (file)
@@ -1947,6 +1947,9 @@ qemuBlockStorageSourceChainDataFree(qemuBlockStorageSourceChainData *data)
     for (i = 0; i < data->nsrcdata; i++)
         qemuBlockStorageSourceAttachDataFree(data->srcdata[i]);
 
+    virJSONValueFree(data->copyOnReadProps);
+    g_free(data->copyOnReadNodename);
+
     g_free(data->srcdata);
     g_free(data);
 }
@@ -2054,6 +2057,11 @@ qemuBlockStorageSourceChainAttach(qemuMonitor *mon,
             return -1;
     }
 
+    if (data->copyOnReadProps) {
+        if (qemuMonitorBlockdevAdd(mon, &data->copyOnReadProps) < 0)
+            return -1;
+    }
+
     return 0;
 }
 
@@ -2072,6 +2080,10 @@ qemuBlockStorageSourceChainDetach(qemuMonitor *mon,
 {
     size_t i;
 
+    if (data->copyOnReadAttached)
+        ignore_value(qemuMonitorBlockdevDel(mon, data->copyOnReadNodename));
+
+
     for (i = 0; i < data->nsrcdata; i++)
         qemuBlockStorageSourceAttachRollback(mon, data->srcdata[i]);
 }
index 28ccca97a85318c16eb6ad911dfb9f93a4fd873e..ff7048eb6c7cfd42db642c840b6310f98f0cdb97 100644 (file)
@@ -150,6 +150,10 @@ qemuBlockStorageSourceDetachOneBlockdev(virQEMUDriver *driver,
 struct _qemuBlockStorageSourceChainData {
     qemuBlockStorageSourceAttachData **srcdata;
     size_t nsrcdata;
+
+    virJSONValue *copyOnReadProps;
+    char *copyOnReadNodename;
+    bool copyOnReadAttached;
 };
 
 typedef struct _qemuBlockStorageSourceChainData qemuBlockStorageSourceChainData;