[libvirt] [PATCH 8/9] qemu: capabilities: Lock out incremental backup capability without blockdev

Peter Krempa posted 9 patches 6 years, 2 months ago
[libvirt] [PATCH 8/9] qemu: capabilities: Lock out incremental backup capability without blockdev
Posted by Peter Krempa 6 years, 2 months ago
Blockdev is required to do incremental backups properly. Add a helper
function for locking out capabilities and export it to allow re-doing
the processing if a different code path modifies capabilities.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_capabilities.c | 17 +++++++++++++++++
 src/qemu/qemu_capabilities.h |  2 ++
 2 files changed, 19 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 7c0533aef5..124619b733 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4577,6 +4577,21 @@ virQEMUCapsInitQMPVersionCaps(virQEMUCapsPtr qemuCaps)
 }


+/**
+ * virQEMUCapsInitProcessCapsInterlock:
+ * @qemuCaps: QEMU capabilities
+ *
+ * A capability which requires a different capability being present in order
+ * for libvirt to be able to drive it properly should be processed here.
+ */
+void
+virQEMUCapsInitProcessCapsInterlock(virQEMUCapsPtr qemuCaps)
+{
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV))
+        virQEMUCapsClear(qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP);
+}
+
+
 /**
  * virQEMUCapsInitProcessCaps:
  * @qemuCaps: QEMU capabilities
@@ -4627,6 +4642,8 @@ virQEMUCapsInitProcessCaps(virQEMUCapsPtr qemuCaps)
         virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_DISK_DEVICE_ID) &&
         virQEMUCapsGet(qemuCaps, QEMU_CAPS_SAVEVM_MONITOR_NODES))
         virQEMUCapsSet(qemuCaps, QEMU_CAPS_BLOCKDEV);
+
+    virQEMUCapsInitProcessCapsInterlock(qemuCaps);
 }


diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 3fd8bebe79..4d7d836e8c 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -555,6 +555,8 @@ void virQEMUCapsClear(virQEMUCapsPtr qemuCaps,
 bool virQEMUCapsGet(virQEMUCapsPtr qemuCaps,
                     virQEMUCapsFlags flag);

+void virQEMUCapsInitProcessCapsInterlock(virQEMUCapsPtr qemuCaps);
+
 bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
                                const virDomainDef *def);

-- 
2.23.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 8/9] qemu: capabilities: Lock out incremental backup capability without blockdev
Posted by Cole Robinson 6 years, 2 months ago
On 11/25/19 7:53 AM, Peter Krempa wrote:
> Blockdev is required to do incremental backups properly. Add a helper
> function for locking out capabilities and export it to allow re-doing
> the processing if a different code path modifies capabilities.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 17 +++++++++++++++++
>  src/qemu/qemu_capabilities.h |  2 ++
>  2 files changed, 19 insertions(+)
> 

Reviewed-by: Cole Robinson <crobinso@redhat.com>

this made me go look at the case that _BLOCKDEV is disabled. bus='sd',
hmm that's unfortunate. Do you know if there's qemu plans to make it
-blockdev compatible? Maybe -machine option like was done with -pflash?
Or are we stuck with that indefinitely?

Thanks,
Cole

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 8/9] qemu: capabilities: Lock out incremental backup capability without blockdev
Posted by Peter Krempa 6 years, 2 months ago
On Tue, Nov 26, 2019 at 14:57:25 -0500, Cole Robinson wrote:
> On 11/25/19 7:53 AM, Peter Krempa wrote:
> > Blockdev is required to do incremental backups properly. Add a helper
> > function for locking out capabilities and export it to allow re-doing
> > the processing if a different code path modifies capabilities.
> > 
> > Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> > ---
> >  src/qemu/qemu_capabilities.c | 17 +++++++++++++++++
> >  src/qemu/qemu_capabilities.h |  2 ++
> >  2 files changed, 19 insertions(+)
> > 
> 
> Reviewed-by: Cole Robinson <crobinso@redhat.com>
> 
> this made me go look at the case that _BLOCKDEV is disabled. bus='sd',
> hmm that's unfortunate. Do you know if there's qemu plans to make it
> -blockdev compatible? Maybe -machine option like was done with -pflash?
> Or are we stuck with that indefinitely?

There are IIRC 3 board models which don't support sd via -device. Also
there isn't much documentation that would guide us how to use -device
instead of -drive for this. Said that, most boards are already converted
and have e.g. explicit SD controllers, so many cases would be fixable,
but that requires some deep knowledge of qemu.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list