On Fri, Jan 11, 2013 at 17:52:18 +0100, Michal Privoznik wrote: > This is a stub internal API just for now. Its purpose > in life is to start NBD server and feed it with all > domain disks. When adding a disk to NBD server, it > is addressed via its alias (id= param on qemu command line). > --- > src/qemu/qemu_migration.c | 46 +++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 39 insertions(+), 7 deletions(-) > > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > index 6fa4ad6..ccf223e 100644 > --- a/src/qemu/qemu_migration.c > +++ b/src/qemu/qemu_migration.c > @@ -1087,6 +1087,29 @@ error: > return NULL; > } > > +/** > + * qemuMigrationStartNBDServer: > + * @driver: qemu driver > + * @vm: domain > + * @nbdPort: which port is NBD server listening to > + * > + * Starts NBD server. This is a newer method to copy > + * storage during migration than using 'blk' and 'inc' > + * arguments in 'migrate' monitor command. > + * Error is reported here. > + * > + * Returns 0 on success, -1 otherwise. > + */ > +static int > +qemuMigrationStartNBDServer(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, > + virDomainObjPtr vm ATTRIBUTE_UNUSED, > + int *nbdPort ATTRIBUTE_UNUSED) > +{ > + /* do nothing for now */ > + return 0; Just squash 8/11 into this patch. > +} > + > + > /* Validate whether the domain is safe to migrate. If vm is NULL, > * then this is being run in the v2 Prepare stage on the destination > * (where we only have the target xml); if vm is provided, then this > @@ -1799,9 +1822,17 @@ done: > else > cookieFlags = QEMU_MIGRATION_COOKIE_GRAPHICS; > > - /* dummy place holder for real work */ > - nbdPort = 0; > - cookieFlags |= QEMU_MIGRATION_COOKIE_NBD; > + if ((flags & VIR_MIGRATE_NON_SHARED_INC || > + flags & VIR_MIGRATE_NON_SHARED_DISK) && > + mig->nbd && qemuCapsGet(priv->caps, QEMU_CAPS_NBD_SERVER)) { > + /* both source and destination qemus support nbd-server-* > + * commands and user requested disk copy. Use the new ones */ > + if (qemuMigrationStartNBDServer(driver, vm, &nbdPort) < 0) { > + /* error already reported */ > + goto endjob; > + } > + cookieFlags |= QEMU_MIGRATION_COOKIE_NBD; > + } As I said earlier, this code should refuse using NBD in case of tunnelled migration. > > if (qemuMigrationBakeCookie(mig, driver, vm, nbdPort, > cookieout, cookieoutlen, cookieFlags) < 0) { > @@ -1879,9 +1910,10 @@ qemuMigrationPrepareTunnel(virQEMUDriverPtr driver, > int ret; > > VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, " > - "cookieout=%p, cookieoutlen=%p, st=%p, dname=%s, dom_xml=%s", > + "cookieout=%p, cookieoutlen=%p, st=%p, dname=%s, dom_xml=%s " > + "flags=%lx", > driver, dconn, NULLSTR(cookiein), cookieinlen, > - cookieout, cookieoutlen, st, NULLSTR(dname), dom_xml); > + cookieout, cookieoutlen, st, NULLSTR(dname), dom_xml, flags); > > /* QEMU will be started with -incoming stdio (which qemu_command might > * convert to exec:cat or fd:n) > @@ -1915,10 +1947,10 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, > > VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, " > "cookieout=%p, cookieoutlen=%p, uri_in=%s, uri_out=%p, " > - "dname=%s, dom_xml=%s", > + "dname=%s, dom_xml=%s flags=%lx", > driver, dconn, NULLSTR(cookiein), cookieinlen, > cookieout, cookieoutlen, NULLSTR(uri_in), uri_out, > - NULLSTR(dname), dom_xml); > + NULLSTR(dname), dom_xml, flags); > > /* The URI passed in may be NULL or a string "tcp://somehostname:port". > * These two hunks are unrelated and may be pushed separately, ACK to them. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list