mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 22:25:25 +00:00
qemu: monitor: Add infrastructure to access VM logs for better err msgs
Early VM startup errors usually produce a better error message in the machine log file. Currently we were accessing it only when the process exited during certain phases of startup. This will help adding a more comprehensive error extraction for early qemu startup phases. This patch adds infrastructure to keep a file descriptor for the machine log file that will be used in case an error happens.
This commit is contained in:
parent
310651a5e3
commit
8519e9ecdc
@ -88,6 +88,9 @@ struct _qemuMonitor {
|
||||
/* If found, path to the virtio memballoon driver */
|
||||
char *balloonpath;
|
||||
bool ballooninit;
|
||||
|
||||
/* Log file fd of the qemu process to dig for usable info */
|
||||
int logfd;
|
||||
};
|
||||
|
||||
static virClassPtr qemuMonitorClass;
|
||||
@ -254,6 +257,7 @@ static void qemuMonitorDispose(void *obj)
|
||||
VIR_FREE(mon->buffer);
|
||||
virJSONValueFree(mon->options);
|
||||
VIR_FREE(mon->balloonpath);
|
||||
VIR_FORCE_CLOSE(mon->logfd);
|
||||
}
|
||||
|
||||
|
||||
@ -715,6 +719,7 @@ qemuMonitorOpenInternal(virDomainObjPtr vm,
|
||||
return NULL;
|
||||
|
||||
mon->fd = -1;
|
||||
mon->logfd = -1;
|
||||
if (virCondInit(&mon->notify) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("cannot initialize monitor condition"));
|
||||
@ -3843,3 +3848,25 @@ qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
|
||||
|
||||
return qemuMonitorJSONGetDeviceAliases(mon, aliases);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuMonitorSetDomainLog:
|
||||
* Set the file descriptor of the open VM log file to report potential
|
||||
* early startup errors of qemu.
|
||||
*
|
||||
* @mon: Monitor object to set the log file reading on
|
||||
* @logfd: File descriptor of the already open log file
|
||||
*/
|
||||
int
|
||||
qemuMonitorSetDomainLog(qemuMonitorPtr mon, int logfd)
|
||||
{
|
||||
VIR_FORCE_CLOSE(mon->logfd);
|
||||
if (logfd >= 0 &&
|
||||
(mon->logfd = dup(logfd)) < 0) {
|
||||
virReportSystemError(errno, "%s", _("failed to duplicate log fd"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -761,6 +761,8 @@ int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
|
||||
int qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
|
||||
char ***aliases);
|
||||
|
||||
int qemuMonitorSetDomainLog(qemuMonitorPtr mon, int logfd);
|
||||
|
||||
/**
|
||||
* When running two dd process and using <> redirection, we need a
|
||||
* shell that will not truncate files. These two strings serve that
|
||||
|
Loading…
Reference in New Issue
Block a user