[PATCH 21/80] qemu: migration: Remove pre-blockdev code paths
Pavel Hrdina
phrdina at redhat.com
Tue Aug 9 12:51:26 UTC 2022
On Tue, Aug 09, 2022 at 02:03:03PM +0200, Peter Krempa wrote:
> On Wed, Aug 03, 2022 at 17:45:07 +0200, Pavel Hrdina wrote:
> > On Tue, Jul 26, 2022 at 04:36:59PM +0200, Peter Krempa wrote:
> > > Assume that QEMU_CAPS_BLOCKDEV is present and remove all code executed
> > > when it's not.
> > >
> > > Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> > > ---
> > > src/qemu/qemu_migration.c | 127 ++++++++------------------------------
> > > 1 file changed, 25 insertions(+), 102 deletions(-)
> > >
> > > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> > > index 8e9428a5bb..ef24a1dedf 100644
> > > --- a/src/qemu/qemu_migration.c
> > > +++ b/src/qemu/qemu_migration.c
> >
> > [...]
> >
> > > @@ -2687,41 +2626,25 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
> > > }
> > >
> > > if (flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)) {
> > > - if (flags & VIR_MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES &&
> > > - !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
> > > + if (flags & VIR_MIGRATE_TUNNELLED) {
> > > virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> > > - _("VIR_MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES is not supported by this QEMU"));
> > > - return NULL;
> > > + _("migration of non-shared storage is not supported with tunnelled migration and this QEMU"));
>
> [1]
>
> > > }
> > >
> > > - if (flags & VIR_MIGRATE_TUNNELLED) {
>
> Even prior to this patch, when tunnelled migration is requested with the
> VIR_MIGRATE_NON_SHARED* flag
>
> > > - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
> > > - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> > > - _("migration of non-shared storage is not supported with tunnelled migration and this QEMU"));
> > > - return NULL;
> > > - }
>
> ... and blockdev is enabled, we simply reject it right away without
> consulting anything else. This is what is now done right at the
> beginning [1] ...
>
> > > -
> > > - if (nmigrate_disks) {
> > > - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> > > - _("Selecting disks to migrate is not implemented for tunnelled migration"));
> > > - return NULL;
> > > - }
> > > - } else {
> > > - if (nmigrate_disks) {
> > > - size_t i, j;
> > > - /* Check user requested only known disk targets. */
> > > - for (i = 0; i < nmigrate_disks; i++) {
> > > - for (j = 0; j < vm->def->ndisks; j++) {
> > > - if (STREQ(vm->def->disks[j]->dst, migrate_disks[i]))
> > > - break;
> > > - }
> > > + if (nmigrate_disks) {
>
> ... so that we don't have to worry about any further checks.
>
> > > + size_t i, j;
> > > + /* Check user requested only known disk targets. */
> > > + for (i = 0; i < nmigrate_disks; i++) {
> > > + for (j = 0; j < vm->def->ndisks; j++) {
> > > + if (STREQ(vm->def->disks[j]->dst, migrate_disks[i]))
> > > + break;
> > > + }
> > >
> > > - if (j == vm->def->ndisks) {
> > > - virReportError(VIR_ERR_INVALID_ARG,
> > > - _("disk target %s not found"),
> > > - migrate_disks[i]);
> > > - return NULL;
> > > - }
> > > + if (j == vm->def->ndisks) {
> > > + virReportError(VIR_ERR_INVALID_ARG,
> > > + _("disk target %s not found"),
> > > + migrate_disks[i]);
> > > + return NULL;
> > > }
> > > }
> >
> > This changes doesn't look equivalent.
> >
> > Before this patch the `for` loop to check `nmigrate_disks` would be done
> > only for non-tunneled migration but after this changes it is done even
> > for tunneled migration.
>
> As explained above, even before this patch we rejected tunnelled
> migration with storage when blockdev was enabled.
>
> After this patch, it's checked at the beginning and thus the rest of the
> code doesn't need to be conditional.
>
> > In addition the new code dropped the error path for tunneled migration
> > if `nmigrate_disks` is not NULL.
>
> Once again, we simply reject tunneled migration with storage
> unconditionally now, so the check would be dead code.
I guess brain fog or what is the term used these days :) no idea how
I've missed that.
Reviewed-by: Pavel Hrdina <phrdina at redhat.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20220809/a7084268/attachment.sig>
More information about the libvir-list
mailing list