[libvirt] [PATCH 0/6] virsh: Fix 'vcpuinfo' on inactive VMs with new hotplug vcpus
by Peter Krempa
See patch 6/6.
Peter Krempa (6):
util: bitmap: Make bitmaps const in virBitmapNewData and
virBitmapDataToString
virsh: domain: Fix broken indentation in virshCPUCountCollect
virsh: Fix xpath queries for retrieving vcpu count
virsh: Extract cpumap formatting in cmdVcpuinfo
virsh: Extract fallback handling in cmdVcpuinfo
virsh: vcpuinfo: Report proper vcpu numbers and data for offline VMs
src/util/virbitmap.c | 6 +-
src/util/virbitmap.h | 4 +-
tools/virsh-domain.c | 287 ++++++++++++++++++++++++++++++++++++++-------------
3 files changed, 219 insertions(+), 78 deletions(-)
--
2.10.0
8 years, 2 months
[libvirt] [PATCH] allow snapshots of network sheepdog disks
by Vasiliy Tolstov
Sometimes ago in f7c1410b0ee5b878e81f2eddf86c609947a9b27c ability to
snapshot sheepdog disk removed. But sheepdog have ability to store vm
state inside special object type.
Vasiliy Tolstov (1):
sheepdog: allow snapshot
src/qemu/qemu_driver.c | 6 ++++++
1 file changed, 6 insertions(+)
--
2.7.4
8 years, 2 months
[libvirt] [PATCH 0/5] Various virObjectEventState fixes
by Martin Kletzander
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1363628
Martin Kletzander (5):
Change virDomainEventState to virObjectLockable
Reference state when using it as opaque
De-duplicate code into virObjectEventStateCleanupTimer()
Add virObjectEventStateRegisterID to symsfile
Clean timer in virObjectEventStateFlush
src/bhyve/bhyve_driver.c | 2 +-
src/conf/object_event.c | 145 ++++++++++++++++++-------------------
src/conf/object_event.h | 1 -
src/libvirt_private.syms | 2 +-
src/libxl/libxl_driver.c | 2 +-
src/lxc/lxc_driver.c | 2 +-
src/network/bridge_driver.c | 2 +-
src/node_device/node_device_udev.c | 2 +-
src/qemu/qemu_driver.c | 2 +-
src/remote/remote_driver.c | 2 +-
src/storage/storage_driver.c | 2 +-
src/test/test_driver.c | 2 +-
src/uml/uml_driver.c | 2 +-
src/vbox/vbox_common.c | 2 +-
src/vz/vz_driver.c | 2 +-
src/xen/xen_driver.c | 2 +-
16 files changed, 86 insertions(+), 88 deletions(-)
--
2.10.1
8 years, 2 months
[libvirt] [PATCH v3] qemu-migration: Disallow migration of read only disk
by Corey S. McQuay
Currently Libvirt allows attempts to migrate read only disks. Qemu cannot handle this as read only
disks cannot be written to on the destination system. The end result is a cryptic error message
and a failed migration.
This patch causes migration to fail earlier and provides a meaningful error message stating that
migrating read only disks is not supported.
Signed-off-by: Corey S. McQuay <csmcquay(a)linux.vnet.ibm.com>
Reviewed-by: Jason J. Herne <jjherne(a)linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
---
src/qemu/qemu_migration.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index e451ef6..c8fb7ec 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1764,6 +1764,12 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver,
/* check whether disk should be migrated */
if (!qemuMigrateDisk(disk, nmigrate_disks, migrate_disks))
continue;
+
+ if (disk->src->readonly) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+ _("Cannot migrate read-only disk %s"), disk->dst);
+ goto cleanup;
+ }
VIR_FREE(diskAlias);
if (!(diskAlias = qemuAliasFromDisk(disk)))
--
2.7.4
8 years, 2 months
[libvirt] [PATCH] util: Alter return value of virReadFCHost and fix mem leak
by John Ferlan
https://bugzilla.redhat.com/show_bug.cgi?id=1357416
Rather than return a 0 or -1 and the *result string, return just the result
string to the caller. Alter all the callers to handle the different return.
As a side effect or result of this, it's much clearer that we cannot just
assign the returned string into the scsi_host wwnn, wwpn, and fabric_wwn
fields - rather we should fetch a temporary string, then as long as our
fetch was good, VIR_FREE what may have been there, and STEAL what we just got.
This fixes a memory leak in the virNodeDeviceCreateXML code path through
find_new_device and nodeDeviceLookupSCSIHostByWWN which will continually
call nodeDeviceSysfsGetSCSIHostCaps until the expected wwnn/wwpn is found
in the device object capabilities.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
I suppose I could have made two patches out of this, but it felt like
overkill once I realized what the issue was. OK a third one line patch
could have been added to change the virGetFCHostNameByWWN comment as well,
but that'd really be overkill.
src/node_device/node_device_linux_sysfs.c | 55 ++++++++++++-------------------
src/util/virutil.c | 34 ++++++++-----------
src/util/virutil.h | 9 +++--
tests/fchosttest.c | 30 ++++++-----------
4 files changed, 49 insertions(+), 79 deletions(-)
diff --git a/src/node_device/node_device_linux_sysfs.c b/src/node_device/node_device_linux_sysfs.c
index 549d32c..be99c41 100644
--- a/src/node_device/node_device_linux_sysfs.c
+++ b/src/node_device/node_device_linux_sysfs.c
@@ -44,8 +44,7 @@ VIR_LOG_INIT("node_device.node_device_linux_sysfs");
int
nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapDataPtr d)
{
- char *max_vports = NULL;
- char *vports = NULL;
+ char *tmp = NULL;
int ret = -1;
if (virReadSCSIUniqueId(NULL, d->scsi_host.host,
@@ -59,64 +58,53 @@ nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapDataPtr d)
if (virIsCapableFCHost(NULL, d->scsi_host.host)) {
d->scsi_host.flags |= VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST;
- if (virReadFCHost(NULL,
- d->scsi_host.host,
- "port_name",
- &d->scsi_host.wwpn) < 0) {
+ if (!(tmp = virReadFCHost(NULL, d->scsi_host.host, "port_name"))) {
VIR_WARN("Failed to read WWPN for host%d", d->scsi_host.host);
goto cleanup;
}
+ VIR_FREE(d->scsi_host.wwpn);
+ VIR_STEAL_PTR(d->scsi_host.wwpn, tmp);
- if (virReadFCHost(NULL,
- d->scsi_host.host,
- "node_name",
- &d->scsi_host.wwnn) < 0) {
+ if (!(tmp = virReadFCHost(NULL, d->scsi_host.host, "node_name"))) {
VIR_WARN("Failed to read WWNN for host%d", d->scsi_host.host);
goto cleanup;
}
+ VIR_FREE(d->scsi_host.wwnn);
+ VIR_STEAL_PTR(d->scsi_host.wwnn, tmp);
- if (virReadFCHost(NULL,
- d->scsi_host.host,
- "fabric_name",
- &d->scsi_host.fabric_wwn) < 0) {
+ if (!(tmp = virReadFCHost(NULL, d->scsi_host.host, "fabric_name"))) {
VIR_WARN("Failed to read fabric WWN for host%d",
d->scsi_host.host);
goto cleanup;
}
+ VIR_FREE(d->scsi_host.fabric_wwn);
+ VIR_STEAL_PTR(d->scsi_host.fabric_wwn, tmp);
}
if (virIsCapableVport(NULL, d->scsi_host.host)) {
d->scsi_host.flags |= VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS;
- if (virReadFCHost(NULL,
- d->scsi_host.host,
- "max_npiv_vports",
- &max_vports) < 0) {
+ if (!(tmp = virReadFCHost(NULL, d->scsi_host.host,
+ "max_npiv_vports"))) {
VIR_WARN("Failed to read max_npiv_vports for host%d",
d->scsi_host.host);
goto cleanup;
}
- if (virReadFCHost(NULL,
- d->scsi_host.host,
- "npiv_vports_inuse",
- &vports) < 0) {
- VIR_WARN("Failed to read npiv_vports_inuse for host%d",
- d->scsi_host.host);
+ if (virStrToLong_i(tmp, NULL, 10, &d->scsi_host.max_vports) < 0) {
+ VIR_WARN("Failed to parse value of max_npiv_vports '%s'", tmp);
goto cleanup;
}
- if (virStrToLong_i(max_vports, NULL, 10,
- &d->scsi_host.max_vports) < 0) {
- VIR_WARN("Failed to parse value of max_npiv_vports '%s'",
- max_vports);
+ if (!(tmp = virReadFCHost(NULL, d->scsi_host.host,
+ "npiv_vports_inuse"))) {
+ VIR_WARN("Failed to read npiv_vports_inuse for host%d",
+ d->scsi_host.host);
goto cleanup;
}
- if (virStrToLong_i(vports, NULL, 10,
- &d->scsi_host.vports) < 0) {
- VIR_WARN("Failed to parse value of npiv_vports_inuse '%s'",
- vports);
+ if (virStrToLong_i(tmp, NULL, 10, &d->scsi_host.vports) < 0) {
+ VIR_WARN("Failed to parse value of npiv_vports_inuse '%s'", tmp);
goto cleanup;
}
}
@@ -132,8 +120,7 @@ nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapDataPtr d)
VIR_FREE(d->scsi_host.wwpn);
VIR_FREE(d->scsi_host.fabric_wwn);
}
- VIR_FREE(max_vports);
- VIR_FREE(vports);
+ VIR_FREE(tmp);
return ret;
}
diff --git a/src/util/virutil.c b/src/util/virutil.c
index b57a195..2459d2d 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -2008,24 +2008,21 @@ virGetSCSIHostNameByParentaddr(unsigned int domain,
* @sysfs_prefix: "fc_host" sysfs path, defaults to SYSFS_FC_HOST_PATH
* @host: Host number, E.g. 5 of "fc_host/host5"
* @entry: Name of the sysfs entry to read
- * @result: Return the entry value as string
*
* Read the value of sysfs "fc_host" entry.
*
- * Returns 0 on success, and @result is filled with the entry value.
- * as string, Otherwise returns -1. Caller must free @result after
- * use.
+ * Returns result as a stringon success, caller must free @result after
+ * Otherwise returns NULL.
*/
-int
+char *
virReadFCHost(const char *sysfs_prefix,
int host,
- const char *entry,
- char **result)
+ const char *entry)
{
char *sysfs_path = NULL;
char *p = NULL;
- int ret = -1;
char *buf = NULL;
+ char *result = NULL;
if (virAsprintf(&sysfs_path, "%s/host%d/%s",
sysfs_prefix ? sysfs_prefix : SYSFS_FC_HOST_PATH,
@@ -2043,14 +2040,12 @@ virReadFCHost(const char *sysfs_prefix,
else
p = buf;
- if (VIR_STRDUP(*result, p) < 0)
- goto cleanup;
+ ignore_value(VIR_STRDUP(result, p));
- ret = 0;
cleanup:
VIR_FREE(sysfs_path);
VIR_FREE(buf);
- return ret;
+ return result;
}
bool
@@ -2171,7 +2166,7 @@ virManageVport(const int parent_host,
return ret;
}
-/* virGetHostNameByWWN:
+/* virGetFCHostNameByWWN:
*
* Iterate over the sysfs tree to get FC host name (e.g. host5)
* by the provided "wwnn,wwpn" pair.
@@ -2298,7 +2293,7 @@ virFindFCHostCapableVport(const char *sysfs_prefix)
if (!virIsCapableVport(prefix, host))
continue;
- if (virReadFCHost(prefix, host, "port_state", &state) < 0) {
+ if (!(state = virReadFCHost(prefix, host, "port_state"))) {
VIR_DEBUG("Failed to read port_state for host%d", host);
continue;
}
@@ -2310,12 +2305,12 @@ virFindFCHostCapableVport(const char *sysfs_prefix)
}
VIR_FREE(state);
- if (virReadFCHost(prefix, host, "max_npiv_vports", &max_vports) < 0) {
+ if (!(max_vports = virReadFCHost(prefix, host, "max_npiv_vports"))) {
VIR_DEBUG("Failed to read max_npiv_vports for host%d", host);
continue;
}
- if (virReadFCHost(prefix, host, "npiv_vports_inuse", &vports) < 0) {
+ if (!(vports = virReadFCHost(prefix, host, "npiv_vports_inuse"))) {
VIR_DEBUG("Failed to read npiv_vports_inuse for host%d", host);
VIR_FREE(max_vports);
continue;
@@ -2379,14 +2374,13 @@ virGetSCSIHostNameByParentaddr(unsigned int domain ATTRIBUTE_UNUSED,
return NULL;
}
-int
+char *
virReadFCHost(const char *sysfs_prefix ATTRIBUTE_UNUSED,
int host ATTRIBUTE_UNUSED,
- const char *entry ATTRIBUTE_UNUSED,
- char **result ATTRIBUTE_UNUSED)
+ const char *entry ATTRIBUTE_UNUSED)
{
virReportSystemError(ENOSYS, "%s", _("Not supported on this platform"));
- return -1;
+ return NULL;
}
bool
diff --git a/src/util/virutil.h b/src/util/virutil.h
index 703ec53..8c0d83c 100644
--- a/src/util/virutil.h
+++ b/src/util/virutil.h
@@ -182,11 +182,10 @@ virGetSCSIHostNameByParentaddr(unsigned int domain,
unsigned int slot,
unsigned int function,
unsigned int unique_id);
-int virReadFCHost(const char *sysfs_prefix,
- int host,
- const char *entry,
- char **result)
- ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
+char *virReadFCHost(const char *sysfs_prefix,
+ int host,
+ const char *entry)
+ ATTRIBUTE_NONNULL(3);
bool virIsCapableFCHost(const char *sysfs_prefix, int host);
bool virIsCapableVport(const char *sysfs_prefix, int host);
diff --git a/tests/fchosttest.c b/tests/fchosttest.c
index e9b89a7..a08a2e8 100644
--- a/tests/fchosttest.c
+++ b/tests/fchosttest.c
@@ -68,35 +68,25 @@ test3(const void *data ATTRIBUTE_UNUSED)
char *vports = NULL;
int ret = -1;
- if (virReadFCHost(TEST_FC_HOST_PREFIX,
- TEST_FC_HOST_NUM,
- "node_name",
- &wwnn) < 0)
+ if (!(wwnn = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM,
+ "node_name")))
return -1;
- if (virReadFCHost(TEST_FC_HOST_PREFIX,
- TEST_FC_HOST_NUM,
- "port_name",
- &wwpn) < 0)
+ if (!(wwpn = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM,
+ "port_name")))
goto cleanup;
- if (virReadFCHost(TEST_FC_HOST_PREFIX,
- TEST_FC_HOST_NUM,
- "fabric_name",
- &fabric_wwn) < 0)
+ if (!(fabric_wwn = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM,
+ "fabric_name")))
goto cleanup;
- if (virReadFCHost(TEST_FC_HOST_PREFIX,
- TEST_FC_HOST_NUM,
- "max_npiv_vports",
- &max_vports) < 0)
+ if (!(max_vports = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM,
+ "max_npiv_vports")))
goto cleanup;
- if (virReadFCHost(TEST_FC_HOST_PREFIX,
- TEST_FC_HOST_NUM,
- "npiv_vports_inuse",
- &vports) < 0)
+ if (!(vports = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM,
+ "npiv_vports_inuse")))
goto cleanup;
if (STRNEQ(expect_wwnn, wwnn) ||
--
2.7.4
8 years, 2 months
[libvirt] [Fwd: Re: [PATCH 2/4] vbox: replace vboxGlobalData with vboxPrivate.]
by Dawid Zamirski
Sorry, forgot to CC the ML in my last reply.
-------- Forwarded Message --------
From: Dawid Zamirski <dzamirski(a)datto.com>
To: Martin Kletzander <mkletzan(a)redhat.com>
Subject: Re: [libvirt] [PATCH 2/4] vbox: replace vboxGlobalData with
vboxPrivate.
Date: Tue, 11 Oct 2016 10:43:23 -0400
On Tue, 2016-10-11 at 15:47 +0200, Martin Kletzander wrote:
>
>
> and this (and others) you *just* cast it to different struct. That's
> not good. I'm guessing this is still just a differently separated
> commit.
Yes, this was to just make simple changes all over the code base but
keep the commit in "compilable" state for bisecting reasons. Same goes
for the first patch in the series.
8 years, 2 months
[libvirt] [PATCH] libvirt-guests: Weaken dependency on libvirtd
by Andrea Bolognani
The Requires relationship is very strong, in that it prevents
a unit from running unless all the units it Requires are
running as well.
This turns out to be a problem because we want to be able to
restart libvirtd at any time without having libvirt-guests
suspend or shutdown running guests.
Turn the Requires relationship into a Wants relationship:
this way starting libvirt-guests will cause systemd to (attempt
to) start libvirtd as well, but stopping or restarting libvirtd
will not alter libvirt-guests' running state.
---
tools/libvirt-guests.service.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
index b4f54f2..02e6747 100644
--- a/tools/libvirt-guests.service.in
+++ b/tools/libvirt-guests.service.in
@@ -1,6 +1,6 @@
[Unit]
Description=Suspend/Resume Running libvirt Guests
-Requires=libvirtd.service
+Wants=libvirtd.service
After=network.target
After=time-sync.target
After=libvirtd.service
--
2.7.4
8 years, 2 months
[libvirt] [PATCH 0/4] systemd-related fixes and improvements
by Andrea Bolognani
Make libvirt on systemd nicer for the user, by getting rid of
some confusing behavior, and overall more solid.
More details in each specific patch.
Andrea Bolognani (4):
virtlogd.socket: Tie lifecycle to libvirtd.service
libvirt-guests.service: Improve description
libvirt-guests.service: Split After= relationship
libvirt-guests.service: Add Requires=libvirtd.service
daemon/libvirtd.service.in | 1 +
src/logging/virtlogd.service.in | 2 ++
src/logging/virtlogd.socket.in | 2 ++
tools/libvirt-guests.service.in | 7 +++++--
4 files changed, 10 insertions(+), 2 deletions(-)
--
2.7.4
8 years, 2 months
[libvirt] [OSSTEST PATCH 0/2] libvirt: Fix save/restore capability check on ARM
by Ian Jackson
Currently, osstest, the Xen Project's automated test framework,
erroneously thinks that save/restore is supported with libvirt on ARM.
In fact, save/restore is not supported by Xen on ARM at all.
The result is that osstest then actually attempts the save/restore,
and abandons the test job as a failure. This is not desirable.
In these two patches I try to fix the feature detection to get this
right. I'd appreciate advice about whether I have done the right
thing.
My code is based partly on empirical observation of the output of
`virsh capabilities' on x86 and ARM. (See below.)
Thanks,
Ian.
>From baroque0, x86.
As left by 101253.test-amd64-amd64-libvirt-pair; osstest "branch" osstest
<capabilities>
<host>
<cpu>
<arch>x86_64</arch>
<features>
<pae/>
</features>
<model>Haswell-noTSX</model>
<topology sockets='1' cores='4' threads='2'/>
<feature name='vme'/>
<feature name='ds'/>
<feature name='acpi'/>
<feature name='ht'/>
<feature name='tm'/>
<feature name='pbe'/>
<feature name='dtes64'/>
<feature name='monitor'/>
<feature name='ds_cpl'/>
<feature name='vmx'/>
<feature name='smx'/>
<feature name='est'/>
<feature name='tm2'/>
<feature name='xtpr'/>
<feature name='pdcm'/>
<feature name='f16c'/>
<feature name='rdrand'/>
<feature name='tsc_adjust'/>
<feature name='xsaveopt'/>
<feature name='pdpe1gb'/>
<feature name='abm'/>
<feature name='invtsc'/>
</cpu>
<power_management/>
<migration_features>
<live/>
</migration_features>
<netprefix>vif</netprefix>
<topology>
<cells num='1'>
<cell id='0'>
<memory unit='KiB'>9699328</memory>
<cpus num='8'>
<cpu id='0' socket_id='0' core_id='0' siblings='0-1'/>
<cpu id='1' socket_id='0' core_id='0' siblings='0-1'/>
<cpu id='2' socket_id='0' core_id='1' siblings='2-3'/>
<cpu id='3' socket_id='0' core_id='1' siblings='2-3'/>
<cpu id='4' socket_id='0' core_id='2' siblings='4-5'/>
<cpu id='5' socket_id='0' core_id='2' siblings='4-5'/>
<cpu id='6' socket_id='0' core_id='3' siblings='6-7'/>
<cpu id='7' socket_id='0' core_id='3' siblings='6-7'/>
</cpus>
</cell>
</cells>
</topology>
</host>
<guest>
<os_type>xen</os_type>
<arch name='x86_64'>
<wordsize>64</wordsize>
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
<machine>xenpv</machine>
<domain type='xen'/>
</arch>
</guest>
<guest>
<os_type>xen</os_type>
<arch name='i686'>
<wordsize>32</wordsize>
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
<machine>xenpv</machine>
<domain type='xen'/>
</arch>
<features>
<pae/>
</features>
</guest>
<guest>
<os_type>hvm</os_type>
<arch name='i686'>
<wordsize>32</wordsize>
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<machine>xenfv</machine>
<domain type='xen'/>
</arch>
<features>
<pae/>
<nonpae/>
<acpi default='on' toggle='yes'/>
<apic default='on' toggle='no'/>
<hap default='on' toggle='yes'/>
</features>
</guest>
<guest>
<os_type>hvm</os_type>
<arch name='x86_64'>
<wordsize>64</wordsize>
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
<loader>/usr/lib/xen/boot/hvmloader</loader>
<machine>xenfv</machine>
<domain type='xen'/>
</arch>
<features>
<acpi default='on' toggle='yes'/>
<apic default='on' toggle='no'/>
<hap default='on' toggle='yes'/>
</features>
</guest>
</capabilities>
>From arndale-lakeside, ARM.
As left by 101251 | test-armhf-armhf-libvirt; osstest "branch" qemu-mainline
<capabilities>
<host>
<cpu>
<arch>armv7l</arch>
</cpu>
<power_management/>
<netprefix>vif</netprefix>
<topology>
<cells num='1'>
<cell id='0'>
<memory unit='KiB'>2097152</memory>
<cpus num='2'>
<cpu id='0' socket_id='0' core_id='0' siblings='0-1'/>
<cpu id='1' socket_id='0' core_id='0' siblings='0-1'/>
</cpus>
</cell>
</cells>
</topology>
</host>
<guest>
<os_type>xen</os_type>
<arch name='armv7l'>
<wordsize>32</wordsize>
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
<machine>xenpv</machine>
<domain type='xen'/>
</arch>
</guest>
</capabilities>
8 years, 2 months
[libvirt] Recommendations for Libvirt LTS release
by Guido Günther
Hi,
Debian is about to enter it's freeze for the Stretch release in November
and we will support the libvirt version that is in Stretch for at least
5 years.
The upstream version of libvirt at this point will likely be 2.4.0. Are
any other distros about to pick a version around that time so we can
possibly join forces? Are there any recommendations to rather pick
another version due to planned features/fixes/refactorings that haven't
made it to the list yet?
As with previous versions I will feed back patches to the -maint branch
and hope to cut point releases as were currently doing with 0.9.12 but
if other distros (apart from Debians downstreams) would use the same
version this would be a plus.
Cheers,
-- Guido
8 years, 2 months