[PATCH 0/2] qemu: Don't crash on empty USB cdrom hotplug
by Peter Krempa
Fix the main crash cause and also forbid empty USB devices as qemu
doesn't accept them.
Peter Krempa (2):
qemu: block: Allow NULL 'data' in 'qemuBlockStorageSourceChainDetach'
qemu: validate: Reject empty USB disks
src/qemu/qemu_block.c | 3 ++
src/qemu/qemu_validate.c | 6 ++++
.../disk-cdrom-bus-other.x86_64-latest.args | 5 ++--
.../disk-cdrom-bus-other.x86_64-latest.xml | 5 ----
.../qemuxmlconfdata/disk-cdrom-bus-other.xml | 5 ----
.../disk-cdrom-usb-empty.x86_64-latest.err | 1 +
.../qemuxmlconfdata/disk-cdrom-usb-empty.xml | 29 +++++++++++++++++++
tests/qemuxmlconftest.c | 1 +
8 files changed, 42 insertions(+), 13 deletions(-)
create mode 100644 tests/qemuxmlconfdata/disk-cdrom-usb-empty.x86_64-latest.err
create mode 100644 tests/qemuxmlconfdata/disk-cdrom-usb-empty.xml
--
2.46.0
7 months, 4 weeks
[PATCH] qemu: Add support for RAPL MSRs feature
by Anthony Harivel
Add the support in libvirt to activate the RAPL feature in QEMU.
This feature is activated with -accel kvm,rapl=true,path=/path/sock.sock
in QEMU.
The feature is activated in libvirt with the following XML
configuration:
<kvm>
[...]
<rapl state ='on' socket='/run/qemu-vmsr-helper.sock'/>
[...]
</kvm>
See: https://gitlab.com/qemu-project/qemu/-/commit/0418f90809aea5b375c859e744c...
Signed-off-by: Anthony Harivel <aharivel(a)redhat.com>
---
docs/formatdomain.rst | 2 ++
src/conf/domain_conf.c | 30 +++++++++++++++++++
src/conf/domain_conf.h | 2 ++
src/conf/schemas/domaincommon.rng | 10 +++++++
src/qemu/qemu_command.c | 7 +++++
tests/qemuxmlconfdata/kvm-features-off.xml | 1 +
.../kvm-features.x86_64-latest.args | 2 +-
tests/qemuxmlconfdata/kvm-features.xml | 1 +
8 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index e1e219bcb5c5..5c66e41e940f 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -1996,6 +1996,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
<poll-control state='on'/>
<pv-ipi state='off'/>
<dirty-ring state='on' size='4096'/>
+ <rapl state ='on' socket='/run/qemu-vmsr-helper.sock'/>
</kvm>
<xen>
<e820_host state='on'/>
@@ -2111,6 +2112,7 @@ are:
poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
dirty-ring Enable dirty ring feature on, off; size - must be power of 2, range [1024,65536] :since:`8.0.0 (QEMU 6.1)`
+ rapl Enable rapl feature on, off; socket - rapl helper socket :since:`10.8.0 (QEMU 9.1)`
============== ============================================================================ ====================================================== ============================
``xen``
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d950921667a2..06fbcac4aad1 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -220,6 +220,7 @@ VIR_ENUM_IMPL(virDomainKVM,
"poll-control",
"pv-ipi",
"dirty-ring",
+ "rapl"
);
VIR_ENUM_IMPL(virDomainXen,
@@ -16693,6 +16694,14 @@ virDomainFeaturesKVMDefParse(virDomainDef *def,
return -1;
}
}
+
+ /* rapl feature should parse socket property */
+ if (feature == VIR_DOMAIN_KVM_RAPL && value == VIR_TRISTATE_SWITCH_ON) {
+ kvm->socket = virXMLPropString(feat, "socket");
+ if (kvm->socket == NULL) {
+ return -1;
+ }
+ }
}
def->features[VIR_DOMAIN_FEATURE_KVM] = VIR_TRISTATE_SWITCH_ON;
@@ -21108,6 +21117,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
case VIR_DOMAIN_KVM_POLLCONTROL:
case VIR_DOMAIN_KVM_PVIPI:
case VIR_DOMAIN_KVM_DIRTY_RING:
+ case VIR_DOMAIN_KVM_RAPL:
if (src->kvm_features->features[i] != dst->kvm_features->features[i]) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("State of KVM feature '%1$s' differs: source: '%2$s', destination: '%3$s'"),
@@ -21132,6 +21142,15 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
dst->kvm_features->dirty_ring_size);
return false;
}
+
+ if (src->kvm_features->socket != dst->kvm_features->socket) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("rapl helper socket of KVM feature '%1$s' differs: source: '%2$s', destination: '%3$s'"),
+ virDomainKVMTypeToString(i),
+ src->kvm_features->socket,
+ dst->kvm_features->socket);
+ return false;
+ }
}
/* smm */
@@ -27840,6 +27859,17 @@ virDomainDefFormatFeatures(virBuffer *buf,
}
break;
+ case VIR_DOMAIN_KVM_RAPL:
+ if (def->kvm_features->features[j] != VIR_TRISTATE_SWITCH_ABSENT) {
+ virBufferAsprintf(&childBuf, "<%s state='%s'",
+ virDomainKVMTypeToString(j),
+ virTristateSwitchTypeToString(def->kvm_features->features[j]));
+
+ virBufferEscapeString(&childBuf, " socket='%s'", def->kvm_features->socket);
+ virBufferAddLit(&childBuf, "/>\n");
+ }
+ break;
+
case VIR_DOMAIN_KVM_LAST:
break;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index eae621f900b9..aa777850ec72 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2213,6 +2213,7 @@ typedef enum {
VIR_DOMAIN_KVM_POLLCONTROL,
VIR_DOMAIN_KVM_PVIPI,
VIR_DOMAIN_KVM_DIRTY_RING,
+ VIR_DOMAIN_KVM_RAPL,
VIR_DOMAIN_KVM_LAST
} virDomainKVM;
@@ -2400,6 +2401,7 @@ struct _virDomainFeatureKVM {
int features[VIR_DOMAIN_KVM_LAST];
unsigned int dirty_ring_size; /* size of dirty ring for each vCPU, no units */
+ char *socket; /* rapl helper socket */
};
typedef struct _virDomainFeatureTCG virDomainFeatureTCG;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index 05ba69792470..1883bb115ee5 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -8016,6 +8016,16 @@
</optional>
</element>
</optional>
+ <optional>
+ <element name="rapl">
+ <ref name="featurestate"/>
+ <optional>
+ <attribute name="socket">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </element>
+ </optional>
</interleave>
</element>
</define>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 28914c9c346a..d20fb6df5e8e 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6562,6 +6562,9 @@ qemuBuildCpuCommandLine(virCommand *cmd,
case VIR_DOMAIN_KVM_DIRTY_RING:
break;
+ case VIR_DOMAIN_KVM_RAPL:
+ break;
+
case VIR_DOMAIN_KVM_LAST:
break;
}
@@ -7176,6 +7179,10 @@ qemuBuildAccelCommandLine(virCommand *cmd,
def->kvm_features->features[VIR_DOMAIN_KVM_DIRTY_RING] == VIR_TRISTATE_SWITCH_ON) {
virBufferAsprintf(&buf, ",dirty-ring-size=%d", def->kvm_features->dirty_ring_size);
}
+ if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON &&
+ def->kvm_features->features[VIR_DOMAIN_KVM_RAPL] == VIR_TRISTATE_SWITCH_ON) {
+ virBufferAsprintf(&buf, ",rapl=true,rapl-helper-socket=%s", def->kvm_features->socket);
+ }
break;
case VIR_DOMAIN_VIRT_HVF:
diff --git a/tests/qemuxmlconfdata/kvm-features-off.xml b/tests/qemuxmlconfdata/kvm-features-off.xml
index 3cd4ff18f283..3e8dbea4b177 100644
--- a/tests/qemuxmlconfdata/kvm-features-off.xml
+++ b/tests/qemuxmlconfdata/kvm-features-off.xml
@@ -16,6 +16,7 @@
<poll-control state='off'/>
<pv-ipi state='off'/>
<dirty-ring state='off'/>
+ <rapl state='off'/>
</kvm>
</features>
<cpu mode='host-passthrough' check='none' migratable='off'/>
diff --git a/tests/qemuxmlconfdata/kvm-features.x86_64-latest.args b/tests/qemuxmlconfdata/kvm-features.x86_64-latest.args
index 955db67eb4b7..2dd613ab338d 100644
--- a/tests/qemuxmlconfdata/kvm-features.x86_64-latest.args
+++ b/tests/qemuxmlconfdata/kvm-features.x86_64-latest.args
@@ -11,7 +11,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
-S \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \
--accel kvm,dirty-ring-size=4096 \
+-accel kvm,dirty-ring-size=4096,rapl=true,rapl-helper-socket=/run/qemu-vmsr-helper.sock \
-cpu host,migratable=off,kvm=off,kvm-hint-dedicated=on,kvm-poll-control=on \
-m size=219136k \
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
diff --git a/tests/qemuxmlconfdata/kvm-features.xml b/tests/qemuxmlconfdata/kvm-features.xml
index 78091064b109..ee601e06de75 100644
--- a/tests/qemuxmlconfdata/kvm-features.xml
+++ b/tests/qemuxmlconfdata/kvm-features.xml
@@ -16,6 +16,7 @@
<poll-control state='on'/>
<pv-ipi state='on'/>
<dirty-ring state='on' size='4096'/>
+ <rapl state='on' socket='/run/qemu-vmsr-helper.sock'/>
</kvm>
</features>
<cpu mode='host-passthrough' check='none' migratable='off'/>
--
2.46.0
8 months
[libvirt PATCH 00/20] Switch to json-c from yajl
by Ján Tomko
As requested by:
https://gitlab.com/libvirt/libvirt/-/issues/581
The ci update depends on the following libvirt-ci MR:
https://gitlab.com/libvirt/libvirt-ci/-/merge_requests/497
targets: bump OpenSUSE Leap to 15.6
Pipeline:
https://gitlab.com/janotomko/libvirt/-/pipelines/1413887401/
Ján Tomko (20):
tests: json: relax some test cases
ci: update OpenSUSE Leap to 15.6
util: json: introduce virJSONStringPrettifyBlanks
tests: switch to compact empty JSON object formatting
meson: add option for building with json-c
meson: link libvirt with json_c if available
util: json: write a json-c implementation
ci: install json-c too
meson: nss: link with json-c if available
nss: convert findLeases to use json-c
nss: convert findMACs to use json-c
tests: depend on WITH_JSON_C instead of WITH_YAJL
meson: switch checks to depend on json-c instead of yajl
meson-options: switch to depend on json-c instead of yajl
libvirt-spec: switch to building with json-c
meson: do not link anything with yajl anymore
meson: options: drop yajl
meson: drop yajl detection
util: drop dead code
ci: drop yajl completely
ci/buildenv/almalinux-9.sh | 4 +-
ci/buildenv/alpine-319.sh | 4 +-
ci/buildenv/alpine-edge.sh | 4 +-
ci/buildenv/centos-stream-9.sh | 4 +-
ci/buildenv/debian-11-cross-aarch64.sh | 2 +-
ci/buildenv/debian-11-cross-armv6l.sh | 2 +-
ci/buildenv/debian-11-cross-armv7l.sh | 2 +-
ci/buildenv/debian-11-cross-i686.sh | 2 +-
ci/buildenv/debian-11-cross-mips64el.sh | 2 +-
ci/buildenv/debian-11-cross-mipsel.sh | 2 +-
ci/buildenv/debian-11-cross-ppc64le.sh | 2 +-
ci/buildenv/debian-11-cross-s390x.sh | 2 +-
ci/buildenv/debian-11.sh | 2 +-
ci/buildenv/debian-12-cross-aarch64.sh | 2 +-
ci/buildenv/debian-12-cross-armv6l.sh | 2 +-
ci/buildenv/debian-12-cross-armv7l.sh | 2 +-
ci/buildenv/debian-12-cross-i686.sh | 2 +-
ci/buildenv/debian-12-cross-mips64el.sh | 2 +-
ci/buildenv/debian-12-cross-mipsel.sh | 2 +-
ci/buildenv/debian-12-cross-ppc64le.sh | 2 +-
ci/buildenv/debian-12-cross-s390x.sh | 2 +-
ci/buildenv/debian-12.sh | 2 +-
ci/buildenv/debian-sid-cross-aarch64.sh | 2 +-
ci/buildenv/debian-sid-cross-armv6l.sh | 2 +-
ci/buildenv/debian-sid-cross-armv7l.sh | 2 +-
ci/buildenv/debian-sid-cross-i686.sh | 2 +-
ci/buildenv/debian-sid-cross-mips64el.sh | 2 +-
ci/buildenv/debian-sid-cross-ppc64le.sh | 2 +-
ci/buildenv/debian-sid-cross-s390x.sh | 2 +-
ci/buildenv/debian-sid.sh | 2 +-
ci/buildenv/fedora-39.sh | 4 +-
ci/buildenv/fedora-40.sh | 4 +-
ci/buildenv/fedora-rawhide.sh | 4 +-
ci/buildenv/opensuse-leap-15.sh | 2 +-
ci/buildenv/opensuse-tumbleweed.sh | 2 +-
ci/buildenv/ubuntu-2204.sh | 2 +-
ci/buildenv/ubuntu-2404.sh | 2 +-
ci/cirrus/freebsd-13.vars | 2 +-
ci/cirrus/freebsd-14.vars | 2 +-
ci/cirrus/macos-13.vars | 2 +-
ci/cirrus/macos-14.vars | 2 +-
ci/containers/almalinux-9.Dockerfile | 4 +-
ci/containers/alpine-319.Dockerfile | 4 +-
ci/containers/alpine-edge.Dockerfile | 4 +-
ci/containers/centos-stream-9.Dockerfile | 4 +-
.../debian-11-cross-aarch64.Dockerfile | 2 +-
.../debian-11-cross-armv6l.Dockerfile | 2 +-
.../debian-11-cross-armv7l.Dockerfile | 2 +-
ci/containers/debian-11-cross-i686.Dockerfile | 2 +-
.../debian-11-cross-mips64el.Dockerfile | 2 +-
.../debian-11-cross-mipsel.Dockerfile | 2 +-
.../debian-11-cross-ppc64le.Dockerfile | 2 +-
.../debian-11-cross-s390x.Dockerfile | 2 +-
ci/containers/debian-11.Dockerfile | 2 +-
.../debian-12-cross-aarch64.Dockerfile | 2 +-
.../debian-12-cross-armv6l.Dockerfile | 2 +-
.../debian-12-cross-armv7l.Dockerfile | 2 +-
ci/containers/debian-12-cross-i686.Dockerfile | 2 +-
.../debian-12-cross-mips64el.Dockerfile | 2 +-
.../debian-12-cross-mipsel.Dockerfile | 2 +-
.../debian-12-cross-ppc64le.Dockerfile | 2 +-
.../debian-12-cross-s390x.Dockerfile | 2 +-
ci/containers/debian-12.Dockerfile | 2 +-
.../debian-sid-cross-aarch64.Dockerfile | 2 +-
.../debian-sid-cross-armv6l.Dockerfile | 2 +-
.../debian-sid-cross-armv7l.Dockerfile | 2 +-
.../debian-sid-cross-i686.Dockerfile | 2 +-
.../debian-sid-cross-mips64el.Dockerfile | 2 +-
.../debian-sid-cross-ppc64le.Dockerfile | 2 +-
.../debian-sid-cross-s390x.Dockerfile | 2 +-
ci/containers/debian-sid.Dockerfile | 2 +-
ci/containers/fedora-39.Dockerfile | 4 +-
ci/containers/fedora-40.Dockerfile | 4 +-
ci/containers/fedora-rawhide.Dockerfile | 4 +-
ci/containers/opensuse-leap-15.Dockerfile | 4 +-
ci/containers/opensuse-tumbleweed.Dockerfile | 2 +-
ci/containers/ubuntu-2204.Dockerfile | 2 +-
ci/containers/ubuntu-2404.Dockerfile | 2 +-
ci/gitlab/builds.yml | 2 +-
ci/lcitool/projects/libvirt.yml | 2 +-
libvirt.spec.in | 6 +-
meson.build | 61 +--
meson_options.txt | 8 +-
src/libvirt_private.syms | 1 +
src/meson.build | 2 +-
src/util/meson.build | 2 +-
src/util/virjson.c | 481 +++++-------------
src/util/virjson.h | 2 +
tests/meson.build | 8 +-
tests/qemublocktest.c | 5 +-
.../backupmerge/empty-out.json | 4 +-
tests/qemumigparamsdata/empty.json | 4 +-
tests/qemumigparamstest.c | 5 +-
tests/virjsontest.c | 9 +-
tests/virmacmaptest.c | 5 +-
tests/virmacmaptestdata/empty.json | 4 +-
tests/virnetdaemontest.c | 2 +-
tests/virstoragetest.c | 4 +-
tools/nss/libvirt_nss_leases.c | 339 ++++--------
tools/nss/libvirt_nss_macs.c | 263 +++-------
tools/nss/meson.build | 4 +-
101 files changed, 447 insertions(+), 962 deletions(-)
--
2.45.2
8 months
[PATCH] security: apparmor: Allow QEMU read /proc/sys/vm/max_map_count
by Michal Privoznik
In its commit v9.0.0-rc0~1^2 QEMU started to read
/proc/sys/vm/max_map_count file to set up coroutine limits better
(something about VMAs, mmap(), see the commit for more info).
Allow the file in apparmor profile.
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/660
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/security/apparmor/libvirt-qemu.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/security/apparmor/libvirt-qemu.in b/src/security/apparmor/libvirt-qemu.in
index 8b92915281..8f17256554 100644
--- a/src/security/apparmor/libvirt-qemu.in
+++ b/src/security/apparmor/libvirt-qemu.in
@@ -34,6 +34,7 @@
# only modify its comm value or those in its thread group.
owner @{PROC}/@{pid}/task/@{tid}/comm rw,
@{PROC}/sys/kernel/cap_last_cap r,
+ @{PROC}/sys/vm/max_map_count r,
@{PROC}/sys/vm/overcommit_memory r,
# detect hardware capabilities via qemu_getauxval
owner @{PROC}/*/auxv r,
--
2.44.2
8 months
New features tests fails
by Anthony Harivel
Hi,
I'm trying to implement the libvirt part of a new feature that has
landed in QEMU staging [1].
The current draft of this implementations is the following [2].
It compiles on top of master.
But when I want to run the tests suites, I hit an issue I don't managed
to find the problem.
It runs until:
[...]
278/279 libvirt:bin / qemuxmlconftest FAIL 8.63s exit status 1
[...]
then it tells me to run the following to understand the issue:
VIR_TEST_DEBUG=1 VIR_TEST_RANGE=850-851,854-855 /home/aharivel/work/libvirt/build/tests/qemuxmlconftest
It outputs this:
[...]
850) QEMU XML def -> XML kvm-features.x86_64-latest ...
In '/home/aharivel/work/libvirt/tests/qemuxmlconfdata/kvm-features.x86_64-latest.xml':
Offset 533
Expect [ socket='/run/qemu-vmsr-helper.sock'/]
Actual [/]
... FAILED
851) QEMU XML OUT -> XML kvm-features.x86_64-latest ...
In '/home/aharivel/work/libvirt/tests/qemuxmlconfdata/kvm-features.x86_64-latest.xml':
Offset 533
Expect [ socket='/run/qemu-vmsr-helper.sock'/]
Actual [/]
... FAILED
854) QEMU XML def -> XML kvm-features-off.x86_64-latest ...
In '/home/aharivel/work/libvirt/tests/qemuxmlconfdata/kvm-features-off.x86_64-latest.xml':
Offset 527
Expect [/]
Actual [ socket='(null)'/]
... FAILED
855) QEMU XML OUT -> XML kvm-features-off.x86_64-latest ...
In '/home/aharivel/work/libvirt/tests/qemuxmlconfdata/kvm-features-off.x86_64-latest.xml':
Offset 527
Expect [/]
Actual [ socket='(null)'/]
[...] ... FAILED
I certainly did something wrong in the implementation but I don't figure
it out. I understand the Expect / Actual tests.
I'm guessing the issue is that it needs to run the QEMU version where the
feature is possible but I don't see how can tell the test to run this
particular version.
Any advise would be greatly appreciate.
Thanks
Regards,
Anthony
[1] : https://gitlab.com/qemu-project/qemu/-/commit/0418f90809aea5b375c859e744c...
[2] : https://github.com/aharivel/libvirt/commit/153a4489f095e063f3c7e0470a8f92...
8 months
[PATCH 0/3] Fix ARP table parsing over netlink messages
by Martin Kletzander
Somehow it happened that some kernels (I noticed this with 6.10.0 and 6.10.2 on
various machines) started sending NLMSG_DONE message (as they probably should've
even before), but our check for it could've never worked and now `virsh
domifaddr --source arp` sometimes fails with "wrong nlmsg len". So I set out on
a quest to tame the netlink beast and though fierceful debugging and... Oh, I
forgot, nobody reads cover letters. Never mind.
Martin Kletzander (3):
virarptable: Properly calculate rtattr length
virarptable: Fix check for message length
virarptable: End parsing earlier in case of NLMSG_DONE
src/util/virarptable.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
--
2.46.0
8 months
[PATCH 0/2] virsh: Simplify vshTableRowAppend() calling in cmdList()
by Michal Privoznik
*** BLURB HERE ***
Michal Prívozník (2):
virsh: Simplify vshTableRowAppend() calling in cmdList(), part one
virsh: Simplify vshTableRowAppend() calling in cmdList(), part two
tools/virsh-domain-monitor.c | 52 +++++++++++++++---------------------
1 file changed, 21 insertions(+), 31 deletions(-)
--
2.44.2
8 months
[PATCH 0/3] Implement support for QCOW2 data files
by Nikolai Barybin
There are use cases when the existing disks (i.e. LVM) are wanted
to be used with advanced features. For this purpose QEMU allows
data-file feature for qcow2 files: metadata is kept in the qcow2
file like usual, but guest data is written to an external file.
These patches enable support for this feature in libvirt.
Nikolai Barybin (3):
conf: add data-file feature and related fields to virStorageSource
storage: add qcow2 filename parsing from header
qemu: enable qcow2 data-file attach to VM on start
src/conf/storage_source_conf.c | 8 ++++
src/conf/storage_source_conf.h | 5 ++
src/qemu/qemu_block.c | 45 ++++++++++++++++++
src/qemu/qemu_cgroup.c | 3 ++
src/qemu/qemu_namespace.c | 6 +++
src/storage_file/storage_file_probe.c | 66 +++++++++++++++++++++++----
src/storage_file/storage_source.c | 38 ++++++++++++++-
7 files changed, 160 insertions(+), 11 deletions(-)
--
2.43.5
8 months
Shared LVM and starting/stopping volumes
by dajester2005@gmail.com
Ran into a situation using a shared LVM2 volume group, where if there were volumes locked by a server, the pool could not be started on another server due to "vgchange -aly" not being able to acquire locks on all volumes in the pool. This was referenced in issue #38 on gitlab.
Long story short, I've experimented with adding APIs for starting/stopping individual volumes in a storage pool, and implementing that API in the logical backend driver. I'm not a C developer by trade, but all the existing tests pass. I'd like to submit this for some feedback, and see what would be needed to incorporate this, or similar API: https://gitlab.com/dajester2013/libvirt/-/tree/shared-lvm-storage-mods
8 months
Plans for 10.7.0 release (freeze on Tuesday 27 Aug)
by Jiri Denemark
We are getting close to 10.7.0 release of libvirt. To aim for the
release on Monday 02 Sep I suggest entering the freeze on Tuesday 27
Aug and tagging RC2 on Thursday 29 Aug.
I hope this works for everyone.
Jirka
8 months