From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44676) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eGnRU-0008Ns-Qk for qemu-devel@nongnu.org; Mon, 20 Nov 2017 09:53:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eGnRQ-0006Ab-Ad for qemu-devel@nongnu.org; Mon, 20 Nov 2017 09:53:00 -0500 Received: from mx1.redhat.com ([209.132.183.28]:55510) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eGnRQ-0006A4-1u for qemu-devel@nongnu.org; Mon, 20 Nov 2017 09:52:56 -0500 Date: Mon, 20 Nov 2017 14:52:48 +0000 From: "Dr. David Alan Gilbert" Message-ID: <20171120145248.GD2338@work-vm> References: <20171116151419.694-1-anthony.perard@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171116151419.694-1-anthony.perard@citrix.com> Subject: Re: [Qemu-devel] [PATCH v2 for-2.11] migration, xen: Fix block image lock issue on live migration List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony PERARD Cc: qemu-devel@nongnu.org, Stefano Stabellini , Kevin Wolf , Ian Jackson , Wei Liu , Juan Quintela , Eric Blake , Markus Armbruster * Anthony PERARD (anthony.perard@citrix.com) wrote: > When doing a live migration of a Xen guest with libxl, the images for > block devices are locked by the original QEMU process, and this prevent > the QEMU at the destination to take the lock and the migration fail. > > From QEMU point of view, once the RAM of a domain is migrated, there is > two QMP commands, "stop" then "xen-save-devices-state", at which point a > new QEMU is spawned at the destination. > > Release locks in "xen-save-devices-state" so the destination can takes > them, if it's a live migration. > > This patch add the "live" parameter to "xen-save-devices-state" which > default to true so older version of libxenlight can work with newer > version of QEMU. > > Signed-off-by: Anthony PERARD Reviewed-by: Dr. David Alan Gilbert > --- > Changes in V2: > - add the live parameter > > CC: Kevin Wolf > > also CCing libxl maintainers: > CC: Ian Jackson > CC: Wei Liu > --- > migration/savevm.c | 23 ++++++++++++++++++++++- > qapi/migration.json | 6 +++++- > 2 files changed, 27 insertions(+), 2 deletions(-) > > diff --git a/migration/savevm.c b/migration/savevm.c > index 4a88228614..7bc4e23e65 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -2242,13 +2242,20 @@ int save_snapshot(const char *name, Error **errp) > return ret; > } > > -void qmp_xen_save_devices_state(const char *filename, Error **errp) > +void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live, > + Error **errp) > { > QEMUFile *f; > QIOChannelFile *ioc; > int saved_vm_running; > int ret; > > + if (!has_live) { > + /* live default to true so old version of Xen tool stack can have a > + * successfull live migration */ > + live = true; > + } > + > saved_vm_running = runstate_is_running(); > vm_stop(RUN_STATE_SAVE_VM); > global_state_store_running(); > @@ -2263,6 +2270,20 @@ void qmp_xen_save_devices_state(const char *filename, Error **errp) > qemu_fclose(f); > if (ret < 0) { > error_setg(errp, QERR_IO_ERROR); > + } else { > + /* libxl calls the QMP command "stop" before calling > + * "xen-save-devices-state" and in case of migration failure, libxl > + * would call "cont". > + * So call bdrv_inactivate_all (release locks) here to let the other > + * side of the migration take controle of the images. > + */ > + if (live && !saved_vm_running) { > + ret = bdrv_inactivate_all(); > + if (ret) { > + error_setg(errp, "%s: bdrv_inactivate_all() failed (%d)", > + __func__, ret); > + } > + } > } > > the_end: > diff --git a/qapi/migration.json b/qapi/migration.json > index bbc4671ded..03f57c9616 100644 > --- a/qapi/migration.json > +++ b/qapi/migration.json > @@ -1075,6 +1075,9 @@ > # data. See xen-save-devices-state.txt for a description of the binary > # format. > # > +# @live: Optional argument to ask QEMU to treat this command as part of a live > +# migration. Default to true. (since 2.11) > +# > # Returns: Nothing on success > # > # Since: 1.1 > @@ -1086,7 +1089,8 @@ > # <- { "return": {} } > # > ## > -{ 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} } > +{ 'command': 'xen-save-devices-state', > + 'data': {'filename': 'str', '*live':'bool' } } > > ## > # @xen-set-replication: > -- > Anthony PERARD > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK