From: Chen Hanxiao <chenhanxiao@xxxxxxxxx> We lacked of timestamp in tainting of guests log, which bring troubles for finding guest issues: such as whether a guest powerdown caused by qemu-monitor-command or others issues inside guests. If we had timestamp in tainting of guests log, it would be helpful when checking guest's /var/log/messages. Signed-off-by: Chen Hanxiao <chenhanxiao@xxxxxxxxx> --- v2: update logic flow of virDomainObjTaint check src/qemu/qemu_domain.c | 79 +++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index c676042..2bc023c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3999,46 +3999,51 @@ void qemuDomainObjTaint(virQEMUDriverPtr driver, { virErrorPtr orig_err = NULL; bool closeLog = false; + char *timestamp = NULL; + char uuidstr[VIR_UUID_STRING_BUFLEN]; - if (virDomainObjTaint(obj, taint)) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(obj->def->uuid, uuidstr); - - VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s", - obj->def->id, - obj->def->name, - uuidstr, - virDomainTaintTypeToString(taint)); - - /* We don't care about errors logging taint info, so - * preserve original error, and clear any error that - * is raised */ - orig_err = virSaveLastError(); - if (logCtxt == NULL) { - logCtxt = qemuDomainLogContextNew(driver, obj, - QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH); - if (!logCtxt) { - if (orig_err) { - virSetError(orig_err); - virFreeError(orig_err); - } - VIR_WARN("Unable to open domainlog"); - return; - } - closeLog = true; - } + if (!virDomainObjTaint(obj, taint)) + return; + + virUUIDFormat(obj->def->uuid, uuidstr); + + VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s", + obj->def->id, + obj->def->name, + uuidstr, + virDomainTaintTypeToString(taint)); - if (qemuDomainLogContextWrite(logCtxt, - "Domain id=%d is tainted: %s\n", - obj->def->id, - virDomainTaintTypeToString(taint)) < 0) - virResetLastError(); - if (closeLog) - qemuDomainLogContextFree(logCtxt); - if (orig_err) { - virSetError(orig_err); - virFreeError(orig_err); + if ((timestamp = virTimeStringNow()) == NULL) + goto cleanup; + + /* We don't care about errors logging taint info, so + * preserve original error, and clear any error that + * is raised */ + orig_err = virSaveLastError(); + if (logCtxt == NULL) { + logCtxt = qemuDomainLogContextNew(driver, obj, + QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH); + if (!logCtxt) { + VIR_WARN("Unable to open domainlog"); + goto cleanup; } + closeLog = true; + } + + if (qemuDomainLogContextWrite(logCtxt, + "%s: Domain id=%d is tainted: %s\n", + timestamp, + obj->def->id, + virDomainTaintTypeToString(taint)) < 0) + virResetLastError(); + + cleanup: + VIR_FREE(timestamp); + if (closeLog) + qemuDomainLogContextFree(logCtxt); + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); } } -- 2.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list