<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:10.5pt;">
<div align="left" style="text-align:justify;">From: WangYufei <james.wangyufei@huawei.com></div>
<div align="left" style="text-align:justify;">Date: Fri, 27 Sep 2013 11:53:57 +0800</div>
<div align="left" style="text-align:justify;">Subject: [PATCH] qemu_migrate: Fix assign the same port when migrating concurrently</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">When we migrate vms concurrently, there's a chance that libvirtd on destination assign the same port for different migrations, which will lead to migration failed during migration prepare phase on destination. So
we change the port increase to atomic operation to solve the problem.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">Signed-off-by: WangYufei <james.wangyufei@huawei.com></div>
<div align="left" style="text-align:justify;">---</div>
<div align="left" style="text-align:justify;"> src/qemu/qemu_migration.c |    5 +++--</div>
<div align="left" style="text-align:justify;"> 1 files changed, 3 insertions(+), 2 deletions(-)</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c</div>
<div align="left" style="text-align:justify;">index 3a1aab7..0f496f4 100644</div>
<div align="left" style="text-align:justify;">--- a/src/qemu/qemu_migration.c</div>
<div align="left" style="text-align:justify;">+++ b/src/qemu/qemu_migration.c</div>
<div align="left" style="text-align:justify;">@@ -57,6 +57,7 @@</div>
<div align="left" style="text-align:justify;"> #include "virhook.h"</div>
<div align="left" style="text-align:justify;"> #include "virstring.h"</div>
<div align="left" style="text-align:justify;"> #include "virtypedparam.h"</div>
<div align="left" style="text-align:justify;">+#include "viratomic.h"</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;"> #define VIR_FROM_THIS VIR_FROM_QEMU</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">@@ -2521,7 +2522,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,</div>
<div align="left" style="text-align:justify;">      * to be a correct hostname which refers to the target machine).</div>
<div align="left" style="text-align:justify;">      */</div>
<div align="left" style="text-align:justify;">     if (uri_in == NULL) {</div>
<div align="left" style="text-align:justify;">-        this_port = QEMUD_MIGRATION_FIRST_PORT + port++;</div>
<div align="left" style="text-align:justify;">+        this_port = QEMUD_MIGRATION_FIRST_PORT + virAtomicIntInc(&port);</div>
<div align="left" style="text-align:justify;">         if (port == QEMUD_MIGRATION_NUM_PORTS) port = 0;</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">         /* Get hostname */</div>
<div align="left" style="text-align:justify;">@@ -2578,7 +2579,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">         if (uri->port == 0) {</div>
<div align="left" style="text-align:justify;">             /* Generate a port */</div>
<div align="left" style="text-align:justify;">-            this_port = QEMUD_MIGRATION_FIRST_PORT + port++;</div>
<div align="left" style="text-align:justify;">+            this_port = QEMUD_MIGRATION_FIRST_PORT + virAtomicIntInc(&port);</div>
<div align="left" style="text-align:justify;">             if (port == QEMUD_MIGRATION_NUM_PORTS)</div>
<div align="left" style="text-align:justify;">                 port = 0;</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">-- </div>
<div align="left" style="text-align:justify;">1.7.3.1.msysgit.0</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div>Best Regards,</div>
<div>-WangYufei</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
</span></font>
</body>
</html>