[libvirt] [PATCH 4/5] qemu: use virtlogd for character device log files
John Ferlan
jferlan at redhat.com
Fri Feb 26 15:33:30 UTC 2016
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,
>
More information about the libvir-list
mailing list