qga-win: don't hang if vss hold writes timeout
When VM is in a heavy IO, if the command "guest-fsfreeze-freeze" is executed, VSS may timeout when trying to hold writes. Inside guest, Event ID 12298(VSS_ERROR_HOLD_WRITES_TIMEOUT) is logged in the Event Viewer. At that time, if we call AbortBackup, qga may hang forever. This patch will solve this issue. Cc: Michael Roth <mdroth@linux.vnet.ibm.com> Cc: Tomoki Sekiyama <tomoki.sekiyama@gmail.com> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
ae49fbbcd8
commit
4d80d20fe1
@ -419,6 +419,16 @@ void requester_freeze(int *num_vols, ErrorSet *errset)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wait_status == WAIT_TIMEOUT) {
|
||||||
|
err_set(errset, E_FAIL,
|
||||||
|
"timeout when try to receive Frozen event from VSS provider");
|
||||||
|
/* If we are here, VSS had timeout.
|
||||||
|
* Don't call AbortBackup, just return directly.
|
||||||
|
*/
|
||||||
|
goto out1;
|
||||||
|
}
|
||||||
|
|
||||||
if (wait_status != WAIT_OBJECT_0) {
|
if (wait_status != WAIT_OBJECT_0) {
|
||||||
err_set(errset, E_FAIL,
|
err_set(errset, E_FAIL,
|
||||||
"couldn't receive Frozen event from VSS provider");
|
"couldn't receive Frozen event from VSS provider");
|
||||||
@ -432,6 +442,8 @@ out:
|
|||||||
if (vss_ctx.pVssbc) {
|
if (vss_ctx.pVssbc) {
|
||||||
vss_ctx.pVssbc->AbortBackup();
|
vss_ctx.pVssbc->AbortBackup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out1:
|
||||||
requester_cleanup();
|
requester_cleanup();
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user