提交 3f8b57a6 编写于 作者: L Laine Stump

qemu: save/restore original error when recovering from failed bridge attach

Not only was the original error code destroyed in the case of
encountering an error during recovery from a failed attach to the
bridge (and then *that* error was destroyed by logging a *second*
error about the failure to recover - virNetDevBridgeAddPort() already
logs an error, so the one about failing to recover was redundant), but
if the recovery was successful, the function would then return success
to the caller even though it had failed.

Fixes: 2711ac87
(overwritten errors were introduced along with this functionality)
Fixes: 6bde0a1a
(the wrong return value was introduced by a refactor)
Signed-off-by: NLaine Stump <laine@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 057c07ed
...@@ -3352,14 +3352,13 @@ qemuDomainChangeNetBridge(virDomainObjPtr vm, ...@@ -3352,14 +3352,13 @@ qemuDomainChangeNetBridge(virDomainObjPtr vm,
ret = virNetDevBridgeAddPort(newbridge, olddev->ifname); ret = virNetDevBridgeAddPort(newbridge, olddev->ifname);
virDomainAuditNet(vm, NULL, newdev, "attach", ret == 0); virDomainAuditNet(vm, NULL, newdev, "attach", ret == 0);
if (ret < 0) { if (ret < 0) {
virErrorPtr err;
virErrorPreserveLast(&err);
ret = virNetDevBridgeAddPort(oldbridge, olddev->ifname); ret = virNetDevBridgeAddPort(oldbridge, olddev->ifname);
virDomainAuditNet(vm, NULL, olddev, "attach", ret == 0); virDomainAuditNet(vm, NULL, olddev, "attach", ret == 0);
if (ret < 0) { virErrorRestore(&err);
virReportError(VIR_ERR_OPERATION_FAILED, return -1;
_("unable to recover former state by adding port "
"to bridge %s"), oldbridge);
}
return ret;
} }
/* caller will replace entire olddev with newdev in domain nets list */ /* caller will replace entire olddev with newdev in domain nets list */
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册