[libvirt] [PATCH v2 0/5] parallels: manage container's filesystems
by Dmitry Guryanov
This patch series adds ability to manage container's
filesystems: you can add or remove fs from existing
container or create new one, based on existing
disk image.
Dmitry Guryanov (5):
add ploop fs driver type
parallels: dump info about container filesystems
parallels: commit with PVCF_DETACH_HDD_BUNDLE flag
parallels: allow to add filesystems to container
parallels: create container from existing image
docs/formatdomain.html.in | 3 +-
docs/schemas/domaincommon.rng | 1 +
docs/schemas/storagecommon.rng | 1 +
src/conf/domain_conf.c | 3 +-
src/conf/domain_conf.h | 1 +
src/parallels/parallels_sdk.c | 209 +++++++++++++++++++--
src/qemu/qemu_command.c | 1 +
.../domain-parallels-ct-simple.xml | 5 +
8 files changed, 206 insertions(+), 18 deletions(-)
--
2.1.0
9 years, 10 months
[libvirt] [PATCH 0/3] Fix adding PCI bridge controller to extend default PCI bus
by Erik Skultety
Erik Skultety (3):
qemu: Tweak auto adding PCI bridge controller when extending default
PCI bus
qemu: qemuDomainAssignPCIAddresses fix dead code
qemu: Add XML test for too many PCI devices on default PCI bus
src/qemu/qemu_command.c | 26 ++-
tests/qemuxml2argvdata/qemuxml2argv-pci-many.args | 63 +++++++
tests/qemuxml2argvdata/qemuxml2argv-pci-many.xml | 214 ++++++++++++++++++++++
tests/qemuxml2argvtest.c | 2 +
4 files changed, 301 insertions(+), 4 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-many.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pci-many.xml
--
1.9.3
9 years, 10 months
[libvirt] [PATCH] network: Resolve Coverity FORWARD_NULL
by John Ferlan
Commit id 'ca481a6f' added virNetworkRouteDefFree which may be called
in an error path from lxcAddNetworkRouteDefinition with 'route = NULL'.
So just add the (!def) at the top to resolve.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/networkcommon_conf.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/conf/networkcommon_conf.c b/src/conf/networkcommon_conf.c
index 3f0896d..7b7a851 100644
--- a/src/conf/networkcommon_conf.c
+++ b/src/conf/networkcommon_conf.c
@@ -52,6 +52,8 @@ struct _virNetworkRouteDef {
void
virNetworkRouteDefFree(virNetworkRouteDefPtr def)
{
+ if (!def)
+ return;
VIR_FREE(def->family);
VIR_FREE(def);
}
--
2.1.0
9 years, 10 months
[libvirt] [PATCH 0/2] qemu: Add support for PMU feature
by Martin Kletzander
This is based on top of:
https://www.redhat.com/archives/libvir-list/2015-January/msg00307.html
Martin Kletzander (2):
docs, schema, conf: Add support for PMU feature
qemu: Add support for enabling/disabling PMU
docs/formatdomain.html.in | 6 ++++++
docs/schemas/domaincommon.rng | 11 ++++++++++
src/conf/domain_conf.c | 8 +++++--
src/conf/domain_conf.h | 3 ++-
src/qemu/qemu_command.c | 12 ++++++++++-
.../qemuxml2argv-pmu-feature-off.args | 5 +++++
.../qemuxml2argv-pmu-feature-off.xml | 25 ++++++++++++++++++++++
.../qemuxml2argvdata/qemuxml2argv-pmu-feature.args | 5 +++++
.../qemuxml2argvdata/qemuxml2argv-pmu-feature.xml | 25 ++++++++++++++++++++++
tests/qemuxml2argvtest.c | 3 +++
.../qemuxml2xmlout-pmu-feature.xml | 25 ++++++++++++++++++++++
tests/qemuxml2xmltest.c | 3 +++
12 files changed, 127 insertions(+), 4 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pmu-feature-off.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pmu-feature.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pmu-feature.xml
--
2.2.1
9 years, 10 months
[libvirt] [PATCH v3] virsh: add support for domain XML validation
by Daniel P. Berrange
The 'virsh edit' command gets XML validation enabled by default,
with a --skip-validate option to disable it. The 'virsh define'
and 'virsh create' commands get a --validate option to enable
it, to avoid regressions for existing scripts.
The quality of error reporting from libxml2 varies depending
on the type of XML error made. Sometimes it is quite clear
and useful, other times it is obscure & inaccurate. At least
the user will see an error now, rather than having their
XML modification silently disappear.
---
tools/virsh-domain.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 52 insertions(+), 5 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 6733cfa..bab44fe 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -133,6 +133,28 @@ vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
return vshLookupDomainInternal(ctl, cmd->def->name, n, flags);
}
+static virDomainPtr
+vshDomainDefine(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ virDomainPtr dom;
+ if (flags) {
+ dom = virDomainDefineXMLFlags(conn, xml, flags);
+ /* If validate is the only flag, just drop it and
+ * try again.
+ */
+ if (!dom) {
+ virErrorPtr err = virGetLastError();
+ if (err &&
+ (err->code == VIR_ERR_NO_SUPPORT) &&
+ (flags == VIR_DOMAIN_DEFINE_VALIDATE))
+ dom = virDomainDefineXML(conn, xml);
+ }
+ } else {
+ dom = virDomainDefineXML(conn, xml);
+ }
+ return dom;
+}
+
VIR_ENUM_DECL(vshDomainVcpuState)
VIR_ENUM_IMPL(vshDomainVcpuState,
VIR_VCPU_LAST,
@@ -7154,6 +7176,10 @@ static const vshCmdOptDef opts_create[] = {
.type = VSH_OT_STRING,
.help = N_("pass file descriptors N,M,... to the guest")
},
+ {.name = "validate",
+ .type = VSH_OT_BOOL,
+ .help = N_("validate the XML against the schema")
+ },
{.name = NULL}
};
@@ -7167,7 +7193,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
#ifndef WIN32
bool console = vshCommandOptBool(cmd, "console");
#endif
- unsigned int flags = VIR_DOMAIN_NONE;
+ unsigned int flags = 0;
size_t nfds = 0;
int *fds = NULL;
@@ -7184,6 +7210,8 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_START_PAUSED;
if (vshCommandOptBool(cmd, "autodestroy"))
flags |= VIR_DOMAIN_START_AUTODESTROY;
+ if (vshCommandOptBool(cmd, "validate"))
+ flags |= VIR_DOMAIN_START_VALIDATE;
if (nfds)
dom = virDomainCreateXMLWithFiles(ctl->conn, buffer, nfds, fds, flags);
@@ -7229,6 +7257,10 @@ static const vshCmdOptDef opts_define[] = {
.flags = VSH_OFLAG_REQ,
.help = N_("file containing an XML domain description")
},
+ {.name = "validate",
+ .type = VSH_OT_BOOL,
+ .help = N_("validate the XML against the schema")
+ },
{.name = NULL}
};
@@ -7239,14 +7271,21 @@ cmdDefine(vshControl *ctl, const vshCmd *cmd)
const char *from = NULL;
bool ret = true;
char *buffer;
+ unsigned int flags = 0;
if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0)
return false;
+ if (vshCommandOptBool(cmd, "validate"))
+ flags |= VIR_DOMAIN_DEFINE_VALIDATE;
+
if (virFileReadAll(from, VSH_MAX_XML_FILE, &buffer) < 0)
return false;
- dom = virDomainDefineXML(ctl->conn, buffer);
+ if (flags)
+ dom = virDomainDefineXMLFlags(ctl->conn, buffer, flags);
+ else
+ dom = virDomainDefineXML(ctl->conn, buffer);
VIR_FREE(buffer);
if (dom != NULL) {
@@ -11105,6 +11144,10 @@ static const vshCmdOptDef opts_edit[] = {
.flags = VSH_OFLAG_REQ,
.help = N_("domain name, id or uuid")
},
+ {.name = "skip-validate",
+ .type = VSH_OT_BOOL,
+ .help = N_("skip validation of the XML against the schema")
+ },
{.name = NULL}
};
@@ -11114,13 +11157,17 @@ cmdEdit(vshControl *ctl, const vshCmd *cmd)
bool ret = false;
virDomainPtr dom = NULL;
virDomainPtr dom_edited = NULL;
- unsigned int flags = VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_INACTIVE;
+ unsigned int query_flags = VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_INACTIVE;
+ unsigned int define_flags = VIR_DOMAIN_DEFINE_VALIDATE;
dom = vshCommandOptDomain(ctl, cmd, NULL);
if (dom == NULL)
goto cleanup;
-#define EDIT_GET_XML virDomainGetXMLDesc(dom, flags)
+ if (vshCommandOptBool(cmd, "skip-validate"))
+ define_flags &= ~VIR_DOMAIN_DEFINE_VALIDATE;
+
+#define EDIT_GET_XML virDomainGetXMLDesc(dom, query_flags)
#define EDIT_NOT_CHANGED \
do { \
vshPrint(ctl, _("Domain %s XML configuration not changed.\n"), \
@@ -11129,7 +11176,7 @@ cmdEdit(vshControl *ctl, const vshCmd *cmd)
goto edit_cleanup; \
} while (0)
#define EDIT_DEFINE \
- (dom_edited = virDomainDefineXML(ctl->conn, doc_edited))
+ (dom_edited = vshDomainDefine(ctl->conn, doc_edited, define_flags))
#include "virsh-edit.c"
vshPrint(ctl, _("Domain %s XML configuration edited.\n"),
--
2.1.0
9 years, 10 months
[libvirt] [PATCH] qemu: fix fail to start vm with one cell use memdev and another not
by Luyao Huang
https://bugzilla.redhat.com/show_bug.cgi?id=1182467
We changed our build numa qemu cmd line way in f309db,
But qemu cannot accept one cell use memdev and another not,
so this cause a issue when we start a vm with one cell
have hugpage or nodemask settings and others not.
After this patch we will use memdev for all cells if there
is at least one cell need this.
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
src/qemu/qemu_command.c | 88 +++++++++++++---------
.../qemuxml2argv-numatune-memnode-no-memory.args | 3 +-
2 files changed, 55 insertions(+), 36 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3cafbfb..11ca355 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6613,14 +6613,18 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
virBitmapPtr nodeset)
{
size_t i, j;
- virBuffer buf = VIR_BUFFER_INITIALIZER;
+ virBuffer buf[def->cpu->ncells];
virDomainHugePagePtr master_hugepage = NULL;
char *cpumask = NULL, *tmpmask = NULL, *next = NULL;
char *nodemask = NULL;
char *mem_path = NULL;
int ret = -1;
+ bool need_memdev = false;
const long system_page_size = sysconf(_SC_PAGESIZE) / 1024;
+ for (i = 0; i < def->cpu->ncells; i++)
+ memset(&buf[i], 0, sizeof(buf[i]));
+
if (virDomainNumatuneHasPerNodeBinding(def->numatune) &&
!(virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE))) {
@@ -6672,20 +6676,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
def->cpu->cells[i].mem = cellmem * 1024;
virMemAccess memAccess = def->cpu->cells[i].memAccess;
- VIR_FREE(cpumask);
VIR_FREE(nodemask);
- if (!(cpumask = virBitmapFormat(def->cpu->cells[i].cpumask)))
- goto cleanup;
-
- if (strchr(cpumask, ',') &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("disjoint NUMA cpu ranges are not supported "
- "with this QEMU"));
- goto cleanup;
- }
-
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) {
virDomainNumatuneMemMode mode;
@@ -6752,17 +6744,17 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
if (!(mem_path = qemuGetHugepagePath(&cfg->hugetlbfs[j])))
goto cleanup;
- virBufferAsprintf(&buf,
+ virBufferAsprintf(&buf[i],
"memory-backend-file,prealloc=yes,mem-path=%s",
mem_path);
switch (memAccess) {
case VIR_MEM_ACCESS_SHARED:
- virBufferAddLit(&buf, ",share=on");
+ virBufferAddLit(&buf[i], ",share=on");
break;
case VIR_MEM_ACCESS_PRIVATE:
- virBufferAddLit(&buf, ",share=off");
+ virBufferAddLit(&buf[i], ",share=off");
break;
case VIR_MEM_ACCESS_DEFAULT:
@@ -6777,10 +6769,10 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
"only with hugepages"));
goto cleanup;
}
- virBufferAddLit(&buf, "memory-backend-ram");
+ virBufferAddLit(&buf[i], "memory-backend-ram");
}
- virBufferAsprintf(&buf, ",size=%lluM,id=ram-node%zu", cellmem, i);
+ virBufferAsprintf(&buf[i], ",size=%lluM,id=ram-node%zu", cellmem, i);
if (virDomainNumatuneMaybeFormatNodeset(def->numatune, nodeset,
&nodemask, i) < 0)
@@ -6798,19 +6790,15 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
for (tmpmask = nodemask; tmpmask; tmpmask = next) {
if ((next = strchr(tmpmask, ',')))
*(next++) = '\0';
- virBufferAddLit(&buf, ",host-nodes=");
- virBufferAdd(&buf, tmpmask, -1);
+ virBufferAddLit(&buf[i], ",host-nodes=");
+ virBufferAdd(&buf[i], tmpmask, -1);
}
- virBufferAsprintf(&buf, ",policy=%s", policy);
+ virBufferAsprintf(&buf[i], ",policy=%s", policy);
}
- if (hugepage || nodemask) {
- virCommandAddArg(cmd, "-object");
- virCommandAddArgBuffer(cmd, &buf);
- } else {
- virBufferFreeAndReset(&buf);
- }
+ if (hugepage || nodemask)
+ need_memdev = true;
} else {
if (memAccess) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -6819,23 +6807,52 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
goto cleanup;
}
}
+ }
+
+ /*We have finnished build args for all cells, and know
+ *if we can use memdev or no need use it. If there is
+ *one cells have hugepage or nodemask settings, we need
+ *build all cells with -object memory-backend-ram, if not
+ *just use -numa.*/
+ for (i = 0; i < def->cpu->ncells; i++) {
+ unsigned long long cellmem = VIR_DIV_UP(def->cpu->cells[i].mem, 1024);
+ def->cpu->cells[i].mem = cellmem * 1024;
+ VIR_FREE(cpumask);
+
+ if (need_memdev) {
+ virCommandAddArg(cmd, "-object");
+ virCommandAddArgBuffer(cmd, &buf[i]);
+ } else {
+ virBufferFreeAndReset(&buf[i]);
+ }
virCommandAddArg(cmd, "-numa");
- virBufferAsprintf(&buf, "node,nodeid=%zu", i);
+ virBufferAsprintf(&buf[i], "node,nodeid=%zu", i);
+
+ if (!(cpumask = virBitmapFormat(def->cpu->cells[i].cpumask)))
+ goto cleanup;
+
+ if (strchr(cpumask, ',') &&
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("disjoint NUMA cpu ranges are not supported "
+ "with this QEMU"));
+ goto cleanup;
+ }
for (tmpmask = cpumask; tmpmask; tmpmask = next) {
if ((next = strchr(tmpmask, ',')))
*(next++) = '\0';
- virBufferAddLit(&buf, ",cpus=");
- virBufferAdd(&buf, tmpmask, -1);
+ virBufferAddLit(&buf[i], ",cpus=");
+ virBufferAdd(&buf[i], tmpmask, -1);
}
- if (hugepage || nodemask)
- virBufferAsprintf(&buf, ",memdev=ram-node%zu", i);
+ if (need_memdev)
+ virBufferAsprintf(&buf[i], ",memdev=ram-node%zu", i);
else
- virBufferAsprintf(&buf, ",mem=%llu", cellmem);
+ virBufferAsprintf(&buf[i], ",mem=%llu", cellmem);
- virCommandAddArgBuffer(cmd, &buf);
+ virCommandAddArgBuffer(cmd, &buf[i]);
}
ret = 0;
@@ -6843,7 +6860,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
VIR_FREE(cpumask);
VIR_FREE(nodemask);
VIR_FREE(mem_path);
- virBufferFreeAndReset(&buf);
+ for (i = 0; i < def->cpu->ncells; i++)
+ virBufferFreeAndReset(&buf[i]);
return ret;
}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args
index 2addf97..b0e274c 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode-no-memory.args
@@ -2,6 +2,7 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
/usr/bin/kvm -S -M pc -m 64 -smp 2 \
-object memory-backend-ram,size=32M,id=ram-node0,host-nodes=3,policy=preferred \
-numa node,nodeid=0,cpus=0,memdev=ram-node0 \
--numa node,nodeid=1,cpus=1,mem=32 \
+-object memory-backend-ram,size=32M,id=ram-node1 \
+-numa node,nodeid=1,cpus=1,memdev=ram-node1 \
-nographic -monitor unix:/tmp/test-monitor,server,nowait \
-no-acpi -boot c -usb -net none -serial none -parallel none
--
1.8.3.1
9 years, 10 months
[libvirt] [PATCH] Allow shrinking of file based volumes
by Daniel P. Berrange
While the main storage driver code allows the flag
VIR_STORAGE_VOL_RESIZE_SHRINK to be set, none of the backend
drivers are supporting it. At the very least this can work
for plain file based volumes since we just ftruncate() them
to the new size. It does not work with qcow2 volumes, but we
can arguably delegate to qemu-img for error reporting for that
instead of second guessing this for ourselves:
$ virsh vol-resize --shrink /home/berrange/VirtualMachines/demo.qcow2 2G
error: Failed to change size of volume 'demo.qcow2' to 2G
error: internal error: Child process (/usr/bin/qemu-img resize /home/berrange/VirtualMachines/demo.qcow2 2147483648) unexpected exit status 1: qemu-img: qcow2 doesn't support shrinking images yet
qemu-img: This image does not support resize
See also https://bugzilla.redhat.com/show_bug.cgi?id=1021802
---
src/storage/storage_backend_fs.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 34f2153..79543a6 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -1262,7 +1262,8 @@ virStorageBackendFileSystemVolResize(virConnectPtr conn ATTRIBUTE_UNUSED,
unsigned long long capacity,
unsigned int flags)
{
- virCheckFlags(VIR_STORAGE_VOL_RESIZE_ALLOCATE, -1);
+ virCheckFlags(VIR_STORAGE_VOL_RESIZE_ALLOCATE |
+ VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
bool pre_allocate = flags & VIR_STORAGE_VOL_RESIZE_ALLOCATE;
--
2.1.0
9 years, 10 months
[libvirt] [PATCH 0/2] Simplify and test CPU feature formatting code
by Ján Tomko
Ján Tomko (2):
Add an XML test for host-model CPU with features
Simplify condition for formatting CPU features
src/conf/cpu_conf.c | 42 +++++++++++-----------
.../qemuxml2argv-cpu-host-model-features.xml | 33 +++++++++++++++++
tests/qemuxml2xmltest.c | 1 +
3 files changed, 54 insertions(+), 22 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-host-model-features.xml
--
2.0.4
9 years, 10 months
[libvirt] [PATCH v2 0/2] check IOMMU group devices usage when preparing device for vfio passthrough
by Shivaprasad G Bhat
====================================================================
If a device in the same iommu group is in use by a different vm, the guest boot
fails with the below error during vfio passthrough.
bash-4.2$ virsh start demo
error: Failed to start domain demo
error: internal error: process exited while connecting to monitor:
2014-12-02T13:43:52.020136Z qemu-system-x86_64: -device vfio-pci,host=00:1c.3,id=hostdev0,bus=pci.0,addr=0x5: vfio: error opening /dev/vfio/7: Device or resource busy
Solution:
=====================================================================
The patch iterates through the iommu group devices and errors out cleanly
mentioning the device and the guest which is using the device.
With Patch
bash-4.2$ virsh start demo
error: Failed to start domain demo
error: Requested operation is not valid: PCI device 0000:0d:00.0 is in use by driver QEMU, domain vm10
---
Shivaprasad G Bhat (2):
Implement virPCIDeviceGetAddress function
check IOMMU group devices usage when preparing device for vfio passthrough
src/util/virhostdev.c | 89 ++++++++++++++++++++++++++++++-------------------
src/util/virpci.c | 16 +++++++++
src/util/virpci.h | 1 +
3 files changed, 72 insertions(+), 34 deletions(-)
--
Signature
9 years, 10 months
[libvirt] [PATCH 0/3] Add stateDir for storage driver and use for disk backend
by John Ferlan
https://bugzilla.redhat.com/show_bug.cgi?id=1138516
Using the network (and domain) for reference, add a 'stateDir' for the
Storage Driver in order to save off pool and/or volume specific information
into a live running area.
This is useful for the disk backend where volume creation can define a
specific name and target format type to use; however, that information
cannot be encoded into the 'parted' data used to create the partition(s)
on the disk. Thus the data is lost for refresh and restart/reload.
The following patches will add the stateDir, then the infrastructure for
storage volume xml to be saved off, and finally saving/using that data
for the refresh, restart/reload path for the disk backend driver.
John Ferlan (3):
storage: Create a stateDir
storage: Introduce virStorageVol{Save|Delete}Status
storage: Adjustments to disk backend to use stateDir
src/conf/storage_conf.c | 112 +++++++++++++++++++++++++++++++++----
src/conf/storage_conf.h | 13 ++++-
src/libvirt_private.syms | 2 +
src/parallels/parallels_storage.c | 5 +-
src/storage/storage_backend_disk.c | 90 ++++++++++++++++++++++++++++-
src/storage/storage_driver.c | 32 +++++++++--
6 files changed, 232 insertions(+), 22 deletions(-)
--
2.1.0
9 years, 10 months