On 02/23/2016 11:41 AM, Daniel P. Berrange wrote:
If use of virtlogd is enabled, then use it for backing the
character device log files too.
---
src/logging/log_daemon_dispatch.c | 3 +-
src/logging/log_handler.c | 6 +-
src/logging/log_handler.h | 2 +-
src/logging/log_manager.h | 2 +
src/logging/log_protocol.x | 4 +
src/qemu/qemu_command.c | 234 ++++++++++++++++++++++++--------------
<sigh> One of us will have conflicts depending upon whether my final
pile of qemu_command.c cleanup changes gets reviewed...
src/qemu/qemu_command.h | 7 +-
src/qemu/qemu_domain.c | 6 +
src/qemu/qemu_domain.h | 3 +
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_process.c | 4 +-
tests/qemuxml2argvtest.c | 2 +-
12 files changed, 179 insertions(+), 96 deletions(-)
diff --git a/src/logging/log_daemon_dispatch.c b/src/logging/log_daemon_dispatch.c
index a5fa7f0..b00cee2 100644
--- a/src/logging/log_daemon_dispatch.c
+++ b/src/logging/log_daemon_dispatch.c
@@ -50,13 +50,14 @@ virLogManagerProtocolDispatchDomainOpenLogFile(virNetServerPtr server
ATTRIBUTE_
int rv = -1;
off_t offset;
ino_t inode;
+ bool trunc = args->flags &
VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE;
So by changing this means you don't envision other flags in the future
for virLogHandlerDomainOpenLogFile?
IOW: Why isn't this done in the next layer down? Seems we'd be changing
what we're doing (not that anything else is using this yet).
Should perhaps this part be a separate patch?
if ((fd =
virLogHandlerDomainOpenLogFile(virLogDaemonGetHandler(logDaemon),
args->driver,
(unsigned char *)args->dom.uuid,
args->dom.name,
args->path,
- args->flags,
+ trunc,
&inode, &offset)) < 0)
goto cleanup;
diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
index 92cff50..4c08223 100644
--- a/src/logging/log_handler.c
+++ b/src/logging/log_handler.c
@@ -357,7 +357,7 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
const unsigned char *domuuid,
const char *domname,
const char *path,
- unsigned int flags,
+ bool trunc,
ino_t *inode,
off_t *offset)
{
@@ -365,8 +365,6 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
virLogHandlerLogFilePtr file = NULL;
int pipefd[2] = { -1, -1 };
- virCheckFlags(0, -1);
-
virObjectLock(handler);
handler->inhibitor(true, handler->opaque);
@@ -400,7 +398,7 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
if ((file->file = virRotatingFileWriterNew(path,
DEFAULT_FILE_SIZE,
DEFAULT_MAX_BACKUP,
- false,
+ trunc,
DEFAULT_MODE)) == NULL)
goto error;
diff --git a/src/logging/log_handler.h b/src/logging/log_handler.h
index e61f32d..54a9cd9 100644
--- a/src/logging/log_handler.h
+++ b/src/logging/log_handler.h
@@ -48,7 +48,7 @@ int virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
const unsigned char *domuuid,
const char *domname,
const char *path,
- unsigned int flags,
+ bool trunc,
ino_t *inode,
off_t *offset);
diff --git a/src/logging/log_manager.h b/src/logging/log_manager.h
index d3b9d29..7deaba7 100644
--- a/src/logging/log_manager.h
+++ b/src/logging/log_manager.h
@@ -26,6 +26,8 @@
# include "internal.h"
+# include "logging/log_protocol.h"
+
typedef struct _virLogManager virLogManager;
typedef virLogManager *virLogManagerPtr;
diff --git a/src/logging/log_protocol.x b/src/logging/log_protocol.x
index b0ac31b..0363c75 100644
--- a/src/logging/log_protocol.x
+++ b/src/logging/log_protocol.x
@@ -30,6 +30,10 @@ struct virLogManagerProtocolLogFilePosition {
};
typedef struct virLogManagerProtocolLogFilePosition
virLogManagerProtocolLogFilePosition;
+enum virLogManagerProtocolDomainOpenLogFileFlags {
+ VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE = 1
+};
+
DomainOpenLogFile doesn't have flags now - it just has trunc - so
nothing could be added here (at least w/r/t how I understand it).
/* Obtain a file handle suitable for writing to a
* log file for a domain
*/
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index dee7208..8378470 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -60,6 +60,7 @@
#if defined(__linux__)
# include <linux/capability.h>
#endif
+#include "logging/log_manager.h"
#include <sys/stat.h>
#include <fcntl.h>
@@ -149,6 +150,59 @@ VIR_ENUM_IMPL(qemuNumaPolicy, VIR_DOMAIN_NUMATUNE_MEM_LAST,
"preferred",
"interleave");
+/**
+ * qemuVirCommandGetFDSet:
+ * @cmd: the command to modify
+ * @fd: fd to reassign to the child
+ *
+ * Get the parameters for the QEMU -add-fd command line option
+ * for the given file descriptor. The file descriptor must previously
+ * have been 'transferred' in a virCommandPassFD() call.
+ * This function for example returns "set=10,fd=20".
+ */
+static char *
+qemuVirCommandGetFDSet(virCommandPtr cmd, int fd)
+{
+ char *result = NULL;
+ int idx = virCommandPassFDGetFDIndex(cmd, fd);
+
+ if (idx >= 0) {
+ ignore_value(virAsprintf(&result, "set=%d,fd=%d", idx, fd));
+ } else {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("file descriptor %d has not been transferred"), fd);
+ }
+
+ return result;
+}
+
+
+/**
+ * qemuVirCommandGetDevSet:
+ * @cmd: the command to modify
+ * @fd: fd to reassign to the child
+ *
+ * Get the parameters for the QEMU path= parameter where a file
+ * descriptor is accessed via a file descriptor set, for example
+ * /dev/fdset/10. The file descriptor must previously have been
+ * 'transferred' in a virCommandPassFD() call.
+ */
+static char *
+qemuVirCommandGetDevSet(virCommandPtr cmd, int fd)
+{
+ char *result = NULL;
+ int idx = virCommandPassFDGetFDIndex(cmd, fd);
+
+ if (idx >= 0) {
+ ignore_value(virAsprintf(&result, "/dev/fdset/%d", idx));
+ } else {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("file descriptor %d has not been transferred"), fd);
+ }
+ return result;
+}
+
+
[1] Code motion... Should it be separate?
static int
qemuBuildObjectCommandLinePropsInternal(const char *key,
const virJSONValue *value,
@@ -3850,7 +3904,10 @@ qemuBuildSCSIHostdevDevStr(virDomainDefPtr def,
/* This function outputs a -chardev command line option which describes only the
* host side of the character device */
static char *
-qemuBuildChrChardevStr(const virDomainChrSourceDef *dev,
+qemuBuildChrChardevStr(virLogManagerPtr logManager,
+ virCommandPtr cmd,
+ virDomainDefPtr def,
+ const virDomainChrSourceDef *dev,
const char *alias,
virQEMUCapsPtr qemuCaps)
{
@@ -3973,10 +4030,42 @@ qemuBuildChrChardevStr(const virDomainChrSourceDef *dev,
_("logfile not supported in this QEMU binary"));
goto error;
}
- virBufferAsprintf(&buf, ",logfile=%s", dev->logfile);
- if (dev->logappend != VIR_TRISTATE_SWITCH_ABSENT) {
- virBufferAsprintf(&buf, ",logappend=%s",
- virTristateSwitchTypeToString(dev->logappend));
+ if (logManager) {
+ char *fdset, *fdpath;
+ int flags = 0;
+ int logfd;
+
+ if (dev->logappend == VIR_TRISTATE_SWITCH_OFF)
+ flags |= VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE;
+
+ if ((logfd = virLogManagerDomainOpenLogFile(logManager,
+ "qemu",
+ def->uuid,
+ def->name,
+ dev->logfile,
+ flags,
+ NULL, NULL)) < 0)
+ goto error;
+
+ virCommandPassFD(cmd, logfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
+ if (!(fdset = qemuVirCommandGetFDSet(cmd, logfd)))
Would this error path need to close logfd or is that done because of the
above PassFD path?
+ goto error;
+
+ virCommandAddArg(cmd, "-add-fd");
+ virCommandAddArg(cmd, fdset);
+ VIR_FREE(fdset);
+
+ if (!(fdpath = qemuVirCommandGetDevSet(cmd, logfd)))
Similar question about logfd...
+ goto error;
+
+ virBufferAsprintf(&buf, ",logfile=%s,logappend=on", fdpath);
Always on? Doesn't matter what's been provided in logappend in the XML?
+ VIR_FREE(fdpath);
+ } else {
+ virBufferAsprintf(&buf, ",logfile=%s", dev->logfile);
+ if (dev->logappend != VIR_TRISTATE_SWITCH_ABSENT) {
+ virBufferAsprintf(&buf, ",logappend=%s",
+ virTristateSwitchTypeToString(dev->logappend));
+ }
Could be a separate call rather than inlining...
}
}
@@ -4093,7 +4182,9 @@ qemuBuildChrArgStr(const virDomainChrSourceDef *dev,
static int
-qemuBuildMonitorCommandLine(virCommandPtr cmd,
+qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
+ virCommandPtr cmd,
+ virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
const virDomainChrSourceDef *monitor_chr,
bool monitor_json)
@@ -4106,10 +4197,11 @@ qemuBuildMonitorCommandLine(virCommandPtr cmd,
/* Use -chardev if it's available */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV)) {
- virCommandAddArg(cmd, "-chardev");
- if (!(chrdev = qemuBuildChrChardevStr(monitor_chr, "monitor",
+ if (!(chrdev = qemuBuildChrChardevStr(logManager, cmd, def,
+ monitor_chr, "monitor",
qemuCaps)))
return -1;
+ virCommandAddArg(cmd, "-chardev");
doh! Although I suppose one could make the argument that all the
additions of "-chardev" could be their own patch...
virCommandAddArg(cmd, chrdev);
VIR_FREE(chrdev);
@@ -4248,7 +4340,10 @@ qemuBuildSclpDevStr(virDomainChrDefPtr dev)
static int
-qemuBuildRNGBackendChrdevStr(virDomainRNGDefPtr rng,
+qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
+ virCommandPtr cmd,
+ virDomainDefPtr def,
+ virDomainRNGDefPtr rng,
virQEMUCapsPtr qemuCaps,
char **chr)
{
@@ -4261,7 +4356,8 @@ qemuBuildRNGBackendChrdevStr(virDomainRNGDefPtr rng,
return 0;
case VIR_DOMAIN_RNG_BACKEND_EGD:
- if (!(*chr = qemuBuildChrChardevStr(rng->source.chardev,
+ if (!(*chr = qemuBuildChrChardevStr(logManager, cmd, def,
+ rng->source.chardev,
rng->info.alias, qemuCaps)))
return -1;
}
@@ -6567,7 +6663,10 @@ qemuBuildShmemDevStr(virDomainDefPtr def,
}
char *
-qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
+qemuBuildShmemBackendStr(virLogManagerPtr logManager,
+ virCommandPtr cmd,
+ virDomainDefPtr def,
+ virDomainShmemDefPtr shmem,
virQEMUCapsPtr qemuCaps)
{
char *devstr = NULL;
@@ -6578,13 +6677,16 @@ qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
shmem->name) < 0)
return NULL;
- devstr = qemuBuildChrChardevStr(&shmem->server.chr, shmem->info.alias,
qemuCaps);
+ devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &shmem->server.chr,
+ shmem->info.alias, qemuCaps);
return devstr;
}
static int
-qemuBuildShmemCommandLine(virCommandPtr cmd,
+qemuBuildShmemCommandLine(virLogManagerPtr logManager,
+ virCommandPtr cmd,
virDomainDefPtr def,
virDomainShmemDefPtr shmem,
virQEMUCapsPtr qemuCaps)
@@ -6597,7 +6699,8 @@ qemuBuildShmemCommandLine(virCommandPtr cmd,
VIR_FREE(devstr);
if (shmem->server.enabled) {
- if (!(devstr = qemuBuildShmemBackendStr(shmem, qemuCaps)))
+ if (!(devstr = qemuBuildShmemBackendStr(logManager, cmd, def,
+ shmem, qemuCaps)))
return -1;
virCommandAddArgList(cmd, "-chardev", devstr, NULL);
@@ -6724,59 +6827,6 @@ qemuBuildTPMDevStr(const virDomainDef *def,
}
-/**
- * qemuVirCommandGetFDSet:
- * @cmd: the command to modify
- * @fd: fd to reassign to the child
- *
- * Get the parameters for the QEMU -add-fd command line option
- * for the given file descriptor. The file descriptor must previously
- * have been 'transferred' in a virCommandPassFD() call.
- * This function for example returns "set=10,fd=20".
- */
-static char *
-qemuVirCommandGetFDSet(virCommandPtr cmd, int fd)
-{
- char *result = NULL;
- int idx = virCommandPassFDGetFDIndex(cmd, fd);
-
- if (idx >= 0) {
- ignore_value(virAsprintf(&result, "set=%d,fd=%d", idx, fd));
- } else {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("file descriptor %d has not been transferred"), fd);
- }
-
- return result;
-}
-
-
-/**
- * qemuVirCommandGetDevSet:
- * @cmd: the command to modify
- * @fd: fd to reassign to the child
- *
- * Get the parameters for the QEMU path= parameter where a file
- * descriptor is accessed via a file descriptor set, for example
- * /dev/fdset/10. The file descriptor must previously have been
- * 'transferred' in a virCommandPassFD() call.
- */
-static char *
-qemuVirCommandGetDevSet(virCommandPtr cmd, int fd)
-{
- char *result = NULL;
- int idx = virCommandPassFDGetFDIndex(cmd, fd);
-
- if (idx >= 0) {
- ignore_value(virAsprintf(&result, "/dev/fdset/%d", idx));
- } else {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("file descriptor %d has not been transferred"), fd);
- }
- return result;
-}
-
-
[1] Code motion...
static char *
qemuBuildTPMBackendStr(const virDomainDef *def,
virCommandPtr cmd,
@@ -7020,6 +7070,7 @@ qemuBuildCommandLineCallbacks buildCommandLineCallbacks = {
virCommandPtr
qemuBuildCommandLine(virConnectPtr conn,
virQEMUDriverPtr driver,
+ virLogManagerPtr logManager,
virDomainDefPtr def,
virDomainChrSourceDefPtr monitor_chr,
bool monitor_json,
@@ -7170,7 +7221,8 @@ qemuBuildCommandLine(virConnectPtr conn,
if (qemuBuildSgaCommandLine(cmd, def, qemuCaps) < 0)
goto error;
- if (qemuBuildMonitorCommandLine(cmd, qemuCaps, monitor_chr,
+ if (qemuBuildMonitorCommandLine(logManager, cmd, def,
+ qemuCaps, monitor_chr,
monitor_json) < 0)
goto error;
@@ -7932,13 +7984,14 @@ qemuBuildCommandLine(virConnectPtr conn,
goto error;
}
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&smartcard->data.passthru,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &smartcard->data.passthru,
smartcard->info.alias,
qemuCaps))) {
virBufferFreeAndReset(&opt);
goto error;
}
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -7976,11 +8029,12 @@ qemuBuildCommandLine(virConnectPtr conn,
/* Use -chardev with -device if they are available */
if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&serial->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &serial->source,
serial->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8012,11 +8066,12 @@ qemuBuildCommandLine(virConnectPtr conn,
/* Use -chardev with -device if they are available */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(¶llel->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ ¶llel->source,
parallel->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8045,11 +8100,12 @@ qemuBuildCommandLine(virConnectPtr conn,
goto error;
}
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&channel->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &channel->source,
channel->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8090,11 +8146,12 @@ qemuBuildCommandLine(virConnectPtr conn,
* the newer -chardev interface. */
;
} else {
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&channel->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &channel->source,
channel->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
}
@@ -8124,11 +8181,12 @@ qemuBuildCommandLine(virConnectPtr conn,
goto error;
}
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&console->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &console->source,
console->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8143,11 +8201,12 @@ qemuBuildCommandLine(virConnectPtr conn,
goto error;
}
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&console->source,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &console->source,
console->info.alias,
qemuCaps)))
goto error;
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8487,13 +8546,14 @@ qemuBuildCommandLine(virConnectPtr conn,
virDomainRedirdevDefPtr redirdev = def->redirdevs[i];
char *devstr;
- virCommandAddArg(cmd, "-chardev");
- if (!(devstr = qemuBuildChrChardevStr(&redirdev->source.chr,
+ if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+ &redirdev->source.chr,
redirdev->info.alias,
qemuCaps))) {
goto error;
}
+ virCommandAddArg(cmd, "-chardev");
virCommandAddArg(cmd, devstr);
VIR_FREE(devstr);
@@ -8713,7 +8773,8 @@ qemuBuildCommandLine(virConnectPtr conn,
}
/* possibly add character device for backend */
- if (qemuBuildRNGBackendChrdevStr(rng, qemuCaps, &tmp) < 0)
+ if (qemuBuildRNGBackendChrdevStr(logManager, cmd, def,
+ rng, qemuCaps, &tmp) < 0)
goto error;
if (tmp) {
@@ -8858,7 +8919,8 @@ qemuBuildCommandLine(virConnectPtr conn,
}
for (i = 0; i < def->nshmems; i++) {
- if (qemuBuildShmemCommandLine(cmd, def, def->shmems[i], qemuCaps))
+ if (qemuBuildShmemCommandLine(logManager, cmd,
+ def, def->shmems[i], qemuCaps))
goto error;
}
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index fb684d0..decf463 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -32,6 +32,7 @@
# include "qemu_domain.h"
# include "qemu_domain_address.h"
# include "qemu_capabilities.h"
+# include "logging/log_manager.h"
/* Config type for XML import/export conversions */
# define QEMU_CONFIG_FORMAT_ARGV "qemu-argv"
@@ -59,6 +60,7 @@ char *qemuBuildObjectCommandlineFromJSON(const char *type,
virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
virQEMUDriverPtr driver,
+ virLogManagerPtr logManager,
virDomainDefPtr def,
virDomainChrSourceDefPtr monitor_chr,
bool monitor_json,
There's a "ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(10);" on this API,
that 10 needs to change to 11.
Also with Martin's "qemu: Shorten per-domain directory names" you could
have to modify 16 & 17 too
John
@@ -180,7 +182,10 @@ int qemuBuildRNGBackendProps(virDomainRNGDefPtr
rng,
char *qemuBuildShmemDevStr(virDomainDefPtr def,
virDomainShmemDefPtr shmem,
virQEMUCapsPtr qemuCaps);
-char *qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
+char *qemuBuildShmemBackendStr(virLogManagerPtr logManager,
+ virCommandPtr cmd,
+ virDomainDefPtr def,
+ virDomainShmemDefPtr shmem,
virQEMUCapsPtr qemuCaps);
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index c56f9f1..df422e2 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2603,6 +2603,12 @@ void qemuDomainLogContextRef(qemuDomainLogContextPtr ctxt)
}
+virLogManagerPtr qemuDomainLogContextGetManager(qemuDomainLogContextPtr ctxt)
+{
+ return ctxt->manager;
+}
+
+
void qemuDomainLogContextFree(qemuDomainLogContextPtr ctxt)
{
bool lastRef;
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 8359b1a..f6ce19c 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -35,6 +35,7 @@
# include "qemu_capabilities.h"
# include "virchrdev.h"
# include "virobject.h"
+# include "logging/log_manager.h"
# define QEMU_DOMAIN_FORMAT_LIVE_FLAGS \
(VIR_DOMAIN_XML_SECURE | \
@@ -377,6 +378,8 @@ void qemuDomainLogContextMarkPosition(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextRef(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextFree(qemuDomainLogContextPtr ctxt);
+virLogManagerPtr qemuDomainLogContextGetManager(qemuDomainLogContextPtr ctxt);
+
const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 45ff3c0..1afafd6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7159,7 +7159,7 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn,
}
}
- if (!(cmd = qemuBuildCommandLine(conn, driver, def,
+ if (!(cmd = qemuBuildCommandLine(conn, driver, NULL, def,
&monConfig, monitor_json, qemuCaps,
NULL, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index c5b9f4e..3780d0c 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4987,7 +4987,9 @@ qemuProcessLaunch(virConnectPtr conn,
}
VIR_DEBUG("Building emulator command line");
- if (!(cmd = qemuBuildCommandLine(conn, driver, vm->def, priv->monConfig,
+ if (!(cmd = qemuBuildCommandLine(conn, driver,
+ qemuDomainLogContextGetManager(logCtxt),
+ vm->def, priv->monConfig,
priv->monJSON, priv->qemuCaps,
incoming ? incoming->launchURI : NULL,
snapshot, vmop,
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 624639e..b5323b4 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -345,7 +345,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
testFailed = true;
if (!testFailed &&
- !(cmd = qemuBuildCommandLine(conn, &driver, vmdef, &monitor_chr,
+ !(cmd = qemuBuildCommandLine(conn, &driver, NULL, vmdef, &monitor_chr,
(flags & FLAG_JSON), extraFlags,
migrateURI, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,