Commit 4d80d20f authored by Chen Hanxiao's avatar Chen Hanxiao Committed by Michael Roth
Browse files

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: default avatarChen Hanxiao <chenhanxiao@gmail.com>
Signed-off-by: default avatarMichael Roth <mdroth@linux.vnet.ibm.com>
parent ae49fbbc
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -419,6 +419,16 @@ void requester_freeze(int *num_vols, ErrorSet *errset)
            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) {
        err_set(errset, E_FAIL,
                "couldn't receive Frozen event from VSS provider");
@@ -432,6 +442,8 @@ out:
    if (vss_ctx.pVssbc) {
        vss_ctx.pVssbc->AbortBackup();
    }

out1:
    requester_cleanup();
    CoUninitialize();
}