1. 'last_good_net' indicates the index of last successfully configured
net. so def->nets[last_good_net] should also be clean up if error occurs.
2. if error occurs in 'virNetDevMacVLanVPortProfileRegisterCallback'
(second 'goto err_exit' in loop), we should also do
'virNetDevVPortProfileDisassociate' cleanup for the
'virNetDevVPortProfileAssociate'(first code block in loop). So we should
consider the net is successfully configured after first code block in
loop finishes.
Signed-off-by: Huanle Han <hanxueluo(a)gmail.com>
---
src/qemu/qemu_migration.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 8c45415..e214735 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -5067,6 +5067,7 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def)
net->ifname);
goto err_exit;
}
+ last_good_net = i;
VIR_DEBUG("Port profile Associate succeeded for %s",
net->ifname);
if (virNetDevMacVLanVPortProfileRegisterCallback(net->ifname,
&net->mac,
@@ -5075,13 +5076,12 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def)
VIR_NETDEV_VPORT_PROFILE_OP_CREATE))
goto err_exit;
}
- last_good_net = i;
}
return 0;
err_exit:
- for (i = 0; last_good_net != -1 && i < last_good_net; i++) {
+ for (i = 0; last_good_net != -1 && i <= last_good_net; i++) {
net = def->nets[i];
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevVPortProfileDisassociate(net->ifname,
--
1.9.1