[libvirt] [PATCH v2 0/3] pass the path of compress prog directly

From: Chen Hanxiao <chenhanxiao@gmail.com> This series will pass the path of compress programe directly to functions such as doCoreDump, qemuDomainSaveInternal, etc. this can avoid one extra virFindFileInPath call in during virExec. Also reduce code duplication by macros. Chen Hanxiao (3): qemu_driver: pass path of compress prog directly qemu_driver: simplify compress prog check by macros qemu_driver: pass path of compress prog directly to doCoreDump src/qemu/qemu_driver.c | 242 ++++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 114 deletions(-) -- 1.8.3.1

From: Chen Hanxiao <chenhanxiao@gmail.com> We check compress prog in qemuCompressProgramAvailable, then test it again in virExec again. This path will pass compress prog's path to virExec, avoiding one extra virFindFileInPath call in during virExec. Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> --- v2: init compressed_path as NULL in qemuCompressProgramAvailable src/qemu/qemu_driver.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 97e2ffc..f54aa98 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3037,6 +3037,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver, const char *path, const char *domXML, int compressed, + const char *compressed_path, bool was_running, unsigned int flags, qemuDomainAsyncJob asyncJob) @@ -3084,7 +3085,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver, goto cleanup; /* Perform the migration */ - if (qemuMigrationToFile(driver, vm, fd, qemuCompressProgramName(compressed), + if (qemuMigrationToFile(driver, vm, fd, compressed_path, asyncJob) < 0) goto cleanup; @@ -3137,7 +3138,8 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver, static int qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, virDomainObjPtr vm, const char *path, - int compressed, const char *xmlin, unsigned int flags) + int compressed, const char *compressed_path, + const char *xmlin, unsigned int flags) { char *xml = NULL; bool was_running = false; @@ -3209,7 +3211,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, goto endjob; } - ret = qemuDomainSaveMemory(driver, vm, path, xml, compressed, + ret = qemuDomainSaveMemory(driver, vm, path, xml, compressed, compressed_path, was_running, flags, QEMU_ASYNC_JOB_SAVE); if (ret < 0) goto endjob; @@ -3250,17 +3252,16 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, /* Returns true if a compression program is available in PATH */ static bool -qemuCompressProgramAvailable(virQEMUSaveFormat compress) +qemuCompressProgramAvailable(virQEMUSaveFormat compress, char **compressed_path) { - char *path; + *compressed_path = NULL; if (compress == QEMU_SAVE_FORMAT_RAW) return true; - if (!(path = virFindFileInPath(qemuSaveCompressionTypeToString(compress)))) + if (!(*compressed_path = virFindFileInPath(qemuSaveCompressionTypeToString(compress)))) return false; - VIR_FREE(path); return true; } @@ -3270,6 +3271,7 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, { virQEMUDriverPtr driver = dom->conn->privateData; int compressed = QEMU_SAVE_FORMAT_RAW; + char *compressed_path = NULL; int ret = -1; virDomainObjPtr vm = NULL; virQEMUDriverConfigPtr cfg = NULL; @@ -3287,7 +3289,7 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, "in configuration file")); goto cleanup; } - if (!qemuCompressProgramAvailable(compressed)) { + if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Compression program for image format " "in configuration file isn't available")); @@ -3308,11 +3310,12 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, } ret = qemuDomainSaveInternal(driver, dom, vm, path, compressed, - dxml, flags); + compressed_path, dxml, flags); cleanup: virDomainObjEndAPI(&vm); virObjectUnref(cfg); + VIR_FREE(compressed_path); return ret; } @@ -3343,6 +3346,7 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) virQEMUDriverPtr driver = dom->conn->privateData; virQEMUDriverConfigPtr cfg = NULL; int compressed = QEMU_SAVE_FORMAT_RAW; + char *compressed_path = NULL; virDomainObjPtr vm; char *name = NULL; int ret = -1; @@ -3377,7 +3381,7 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) "in configuration file")); goto cleanup; } - if (!qemuCompressProgramAvailable(compressed)) { + if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Compression program for image format " "in configuration file isn't available")); @@ -3391,13 +3395,14 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) VIR_INFO("Saving state of domain '%s' to '%s'", vm->def->name, name); ret = qemuDomainSaveInternal(driver, dom, vm, name, - compressed, NULL, flags); + compressed, compressed_path, NULL, flags); if (ret == 0) vm->hasManagedSave = true; cleanup: virDomainObjEndAPI(&vm); VIR_FREE(name); + VIR_FREE(compressed_path); virObjectUnref(cfg); return ret; @@ -3617,6 +3622,7 @@ static virQEMUSaveFormat getCompressionType(virQEMUDriverPtr driver) { int ret = QEMU_SAVE_FORMAT_RAW; + char *compressed_path = NULL; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); /* @@ -3634,7 +3640,7 @@ getCompressionType(virQEMUDriverPtr driver) ret = QEMU_SAVE_FORMAT_RAW; goto cleanup; } - if (!qemuCompressProgramAvailable(ret)) { + if (!qemuCompressProgramAvailable(ret, &compressed_path)) { VIR_WARN("%s", _("Compression program for dump image format " "in configuration file isn't available, " "using raw")); @@ -3644,6 +3650,7 @@ getCompressionType(virQEMUDriverPtr driver) } cleanup: virObjectUnref(cfg); + VIR_FREE(compressed_path); return ret; } @@ -14308,6 +14315,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, bool pmsuspended = false; virQEMUDriverConfigPtr cfg = NULL; int compressed = QEMU_SAVE_FORMAT_RAW; + char *compressed_path = NULL; /* If quiesce was requested, then issue a freeze command, and a * counterpart thaw command when it is actually sent to agent. @@ -14377,7 +14385,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, goto cleanup; } - if (!qemuCompressProgramAvailable(compressed)) { + if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Compression program for image format " "in configuration file isn't available")); @@ -14389,7 +14397,8 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, goto cleanup; if ((ret = qemuDomainSaveMemory(driver, vm, snap->def->file, - xml, compressed, resume, 0, + xml, compressed, compressed_path, + resume, 0, QEMU_ASYNC_JOB_SNAPSHOT)) < 0) goto cleanup; @@ -14459,6 +14468,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, } VIR_FREE(xml); + VIR_FREE(compressed_path); virObjectUnref(cfg); if (memory_unlink && ret < 0) unlink(snap->def->file); -- 1.8.3.1

From: Chen Hanxiao <chenhanxiao@gmail.com> We use almost the same codes in checking compress progame for saveImageFormat and snapshotImageFormat. This patch introduce VIR_QEMU_COMPRESS_CHECK to simplify that checking. Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> --- src/qemu/qemu_driver.c | 122 +++++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 55 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f54aa98..8653bc0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3265,6 +3265,64 @@ qemuCompressProgramAvailable(virQEMUSaveFormat compress, char **compressed_path) return true; } +typedef enum { + QEMU_COMPRESS_PROG_IMG = 0, + QEMU_COMPRESS_PROG_SNAP = 1, + + QEMU_COMPRESS_PROG_LAST +}virQEMUCompressType; + +# define VIR_QEMU_COMPRESS_CHECK(val, type) \ + do { \ + if (cfg->val) { \ + compressed = qemuSaveCompressionTypeFromString(cfg->val); \ + if (compressed < 0) { \ + virReportError(VIR_ERR_OPERATION_FAILED, \ + _("Invalid %s image format specified " \ + "in configuration file"), type); \ + goto cleanup; \ + } \ + if (!qemuCompressProgramAvailable(compressed, compressed_path)) { \ + virReportError(VIR_ERR_OPERATION_FAILED, \ + _("Compression program for image format " \ + "in configuration file isn't available")); \ + goto cleanup; \ + } \ + } \ + } while (0); + +/* Get the path of compress programe if available, + * or NULL if no compressed programe specified. + * Return 0 on success, -1 on failure. + * You must free the result */ +static int +qemuCompressProgramPath(virQEMUDriverPtr driver, char **compressed_path, + virQEMUCompressType type) +{ + virQEMUDriverConfigPtr cfg = NULL; + int compressed = QEMU_SAVE_FORMAT_RAW; + *compressed_path = NULL; + int ret = -1; + + cfg = virQEMUDriverGetConfig(driver); + switch (type) { + case QEMU_COMPRESS_PROG_IMG: + VIR_QEMU_COMPRESS_CHECK(saveImageFormat, "save"); + break; + case QEMU_COMPRESS_PROG_SNAP: + VIR_QEMU_COMPRESS_CHECK(snapshotImageFormat, "snapshot"); + break; + default: + break; + } + + ret = 0; + + cleanup: + virObjectUnref(cfg); + return ret; +} + static int qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, unsigned int flags) @@ -3274,28 +3332,14 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, char *compressed_path = NULL; int ret = -1; virDomainObjPtr vm = NULL; - virQEMUDriverConfigPtr cfg = NULL; virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE | VIR_DOMAIN_SAVE_RUNNING | VIR_DOMAIN_SAVE_PAUSED, -1); - cfg = virQEMUDriverGetConfig(driver); - if (cfg->saveImageFormat) { - compressed = qemuSaveCompressionTypeFromString(cfg->saveImageFormat); - if (compressed < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Invalid save image format specified " - "in configuration file")); - goto cleanup; - } - if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Compression program for image format " - "in configuration file isn't available")); - goto cleanup; - } - } + if (qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_IMG) < 0) + goto cleanup; if (!(vm = qemuDomObjFromDomain(dom))) goto cleanup; @@ -3314,7 +3358,6 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, cleanup: virDomainObjEndAPI(&vm); - virObjectUnref(cfg); VIR_FREE(compressed_path); return ret; } @@ -3344,7 +3387,6 @@ static int qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) { virQEMUDriverPtr driver = dom->conn->privateData; - virQEMUDriverConfigPtr cfg = NULL; int compressed = QEMU_SAVE_FORMAT_RAW; char *compressed_path = NULL; virDomainObjPtr vm; @@ -3372,22 +3414,9 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) goto cleanup; } - cfg = virQEMUDriverGetConfig(driver); - if (cfg->saveImageFormat) { - compressed = qemuSaveCompressionTypeFromString(cfg->saveImageFormat); - if (compressed < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Invalid save image format specified " - "in configuration file")); - goto cleanup; - } - if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Compression program for image format " - "in configuration file isn't available")); - goto cleanup; - } - } + if (qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_IMG) < 0) + goto cleanup; if (!(name = qemuDomainManagedSavePath(driver, vm))) goto cleanup; @@ -3403,7 +3432,6 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) virDomainObjEndAPI(&vm); VIR_FREE(name); VIR_FREE(compressed_path); - virObjectUnref(cfg); return ret; } @@ -14313,7 +14341,6 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, bool transaction = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION); int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */ bool pmsuspended = false; - virQEMUDriverConfigPtr cfg = NULL; int compressed = QEMU_SAVE_FORMAT_RAW; char *compressed_path = NULL; @@ -14375,23 +14402,9 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, JOB_MASK(QEMU_JOB_SUSPEND) | JOB_MASK(QEMU_JOB_MIGRATION_OP))); - cfg = virQEMUDriverGetConfig(driver); - if (cfg->snapshotImageFormat) { - compressed = qemuSaveCompressionTypeFromString(cfg->snapshotImageFormat); - if (compressed < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Invalid snapshot image format specified " - "in configuration file")); - goto cleanup; - } - - if (!qemuCompressProgramAvailable(compressed, &compressed_path)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("Compression program for image format " - "in configuration file isn't available")); - goto cleanup; - } - } + if (qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_SNAP) < 0) + goto cleanup; if (!(xml = qemuDomainDefFormatLive(driver, vm->def, true, true))) goto cleanup; @@ -14469,7 +14482,6 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, VIR_FREE(xml); VIR_FREE(compressed_path); - virObjectUnref(cfg); if (memory_unlink && ret < 0) unlink(snap->def->file); -- 1.8.3.1

From: Chen Hanxiao <chenhanxiao@gmail.com> This patch delete getCompressionType and qemuCompressProgramName. Use virReportError instead of VIR_WARN, but don't fail and then continue as it used acting. Then pass the path of compress prog to doCoreDump. If config of compression is not available, pass NULL to doCoreDump. Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> --- src/qemu/qemu_driver.c | 94 +++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8653bc0..512ee08 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2831,15 +2831,6 @@ qemuDomainSaveHeader(int fd, const char *path, const char *xml, return ret; } -/* Given a virQEMUSaveFormat compression level, return the name - * of the program to run, or NULL if no program is needed. */ -static const char * -qemuCompressProgramName(int compress) -{ - return (compress == QEMU_SAVE_FORMAT_RAW ? NULL : - qemuSaveCompressionTypeToString(compress)); -} - static virCommandPtr qemuCompressGetCommand(virQEMUSaveFormat compression) { @@ -3268,6 +3259,7 @@ qemuCompressProgramAvailable(virQEMUSaveFormat compress, char **compressed_path) typedef enum { QEMU_COMPRESS_PROG_IMG = 0, QEMU_COMPRESS_PROG_SNAP = 1, + QEMU_COMPRESS_PROG_DUMP = 2, QEMU_COMPRESS_PROG_LAST }virQEMUCompressType; @@ -3312,6 +3304,9 @@ qemuCompressProgramPath(virQEMUDriverPtr driver, char **compressed_path, case QEMU_COMPRESS_PROG_SNAP: VIR_QEMU_COMPRESS_CHECK(snapshotImageFormat, "snapshot"); break; + case QEMU_COMPRESS_PROG_DUMP: + VIR_QEMU_COMPRESS_CHECK(snapshotImageFormat, "dump"); + break; default: break; } @@ -3563,7 +3558,7 @@ static int doCoreDump(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *path, - virQEMUSaveFormat compress, + const char *compress, unsigned int dump_flags, unsigned int dumpformat) { @@ -3620,7 +3615,7 @@ doCoreDump(virQEMUDriverPtr driver, goto cleanup; ret = qemuMigrationToFile(driver, vm, fd, - qemuCompressProgramName(compress), + compress, QEMU_ASYNC_JOB_DUMP); } @@ -3646,43 +3641,6 @@ doCoreDump(virQEMUDriverPtr driver, return ret; } -static virQEMUSaveFormat -getCompressionType(virQEMUDriverPtr driver) -{ - int ret = QEMU_SAVE_FORMAT_RAW; - char *compressed_path = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - - /* - * We reuse "save" flag for "dump" here. Then, we can support the same - * format in "save" and "dump". - */ - if (cfg->dumpImageFormat) { - ret = qemuSaveCompressionTypeFromString(cfg->dumpImageFormat); - /* Use "raw" as the format if the specified format is not valid, - * or the compress program is not available. - */ - if (ret < 0) { - VIR_WARN("%s", _("Invalid dump image format specified in " - "configuration file, using raw")); - ret = QEMU_SAVE_FORMAT_RAW; - goto cleanup; - } - if (!qemuCompressProgramAvailable(ret, &compressed_path)) { - VIR_WARN("%s", _("Compression program for dump image format " - "in configuration file isn't available, " - "using raw")); - ret = QEMU_SAVE_FORMAT_RAW; - goto cleanup; - } - } - cleanup: - virObjectUnref(cfg); - VIR_FREE(compressed_path); - return ret; -} - - static int qemuDomainCoreDumpWithFormat(virDomainPtr dom, const char *path, @@ -3695,6 +3653,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, bool resume = false, paused = false; int ret = -1; virObjectEventPtr event = NULL; + char *compressed_path = NULL; virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH | VIR_DUMP_BYPASS_CACHE | VIR_DUMP_RESET | @@ -3735,7 +3694,16 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, } } - ret = doCoreDump(driver, vm, path, getCompressionType(driver), flags, + /* + * We reuse "save" flag for "dump" here. Then, we can support the same + * format in "save" and "dump". + * Use "raw" as the format if the specified format is not valid, + * or the compress program is not available. + */ + qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_DUMP); + + ret = doCoreDump(driver, vm, path, compressed_path, flags, dumpformat); if (ret < 0) goto endjob; @@ -3779,6 +3747,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, qemuDomainRemoveInactive(driver, vm); cleanup: + VIR_FREE(compressed_path); virDomainObjEndAPI(&vm); qemuDomainEventQueue(driver, event); return ret; @@ -3924,6 +3893,7 @@ processWatchdogEvent(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); char *dumpfile = getAutoDumpPath(driver, vm); unsigned int flags = VIR_DUMP_MEMORY_ONLY; + char *compressed_path = NULL; if (!dumpfile) goto cleanup; @@ -3942,8 +3912,17 @@ processWatchdogEvent(virQEMUDriverPtr driver, } flags |= cfg->autoDumpBypassCache ? VIR_DUMP_BYPASS_CACHE: 0; + + /* + * We reuse "save" flag for "dump" here. Then, we can support the same + * format in "save" and "dump". + * Use "raw" as the format if the specified format is not valid, + * or the compress program is not available. + */ + qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_DUMP); ret = doCoreDump(driver, vm, dumpfile, - getCompressionType(driver), flags, + compressed_path, flags, VIR_DOMAIN_CORE_DUMP_FORMAT_RAW); if (ret < 0) virReportError(VIR_ERR_OPERATION_FAILED, @@ -3966,6 +3945,7 @@ processWatchdogEvent(virQEMUDriverPtr driver, cleanup: VIR_FREE(dumpfile); + VIR_FREE(compressed_path); virObjectUnref(cfg); } @@ -3977,19 +3957,31 @@ doCoreDumpToAutoDumpPath(virQEMUDriverPtr driver, int ret = -1; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); char *dumpfile = getAutoDumpPath(driver, vm); + char *compressed_path = NULL; if (!dumpfile) goto cleanup; flags |= cfg->autoDumpBypassCache ? VIR_DUMP_BYPASS_CACHE: 0; + + /* + * We reuse "save" flag for "dump" here. Then, we can support the same + * format in "save" and "dump". + * Use "raw" as the format if the specified format is not valid, + * or the compress program is not available. + */ + qemuCompressProgramPath(driver, &compressed_path, + QEMU_COMPRESS_PROG_DUMP); + ret = doCoreDump(driver, vm, dumpfile, - getCompressionType(driver), flags, + compressed_path, flags, VIR_DOMAIN_CORE_DUMP_FORMAT_RAW); if (ret < 0) virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Dump failed")); cleanup: VIR_FREE(dumpfile); + VIR_FREE(compressed_path); virObjectUnref(cfg); return ret; } -- 1.8.3.1

On 09/19/2016 07:06 AM, Chen Hanxiao wrote:
From: Chen Hanxiao <chenhanxiao@gmail.com>
This series will pass the path of compress programe directly to functions such as doCoreDump, qemuDomainSaveInternal, etc. this can avoid one extra virFindFileInPath call in during virExec.
Also reduce code duplication by macros.
Chen Hanxiao (3): qemu_driver: pass path of compress prog directly qemu_driver: simplify compress prog check by macros qemu_driver: pass path of compress prog directly to doCoreDump
src/qemu/qemu_driver.c | 242 ++++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 114 deletions(-)
Not really what I had in mind. I've posted a different approach instead. See http://www.redhat.com/archives/libvir-list/2016-September/msg00971.html BTW: Patch 2 fails syntax-check John

At 2016-09-22 05:32:10, "John Ferlan" <jferlan@redhat.com> wrote:
On 09/19/2016 07:06 AM, Chen Hanxiao wrote:
From: Chen Hanxiao <chenhanxiao@gmail.com>
This series will pass the path of compress programe directly to functions such as doCoreDump, qemuDomainSaveInternal, etc. this can avoid one extra virFindFileInPath call in during virExec.
Also reduce code duplication by macros.
Chen Hanxiao (3): qemu_driver: pass path of compress prog directly qemu_driver: simplify compress prog check by macros qemu_driver: pass path of compress prog directly to doCoreDump
src/qemu/qemu_driver.c | 242 ++++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 114 deletions(-)
Not really what I had in mind.
I've posted a different approach instead. See
http://www.redhat.com/archives/libvir-list/2016-September/msg00971.html
I'll review your series as soon as possible.
BTW: Patch 2 fails syntax-check
I make syntax-check again and passed on a centos7 machine. Maybe it's a syntax-check bug? Regards, - Chen

BTW: Patch 2 fails syntax-check
I make syntax-check again and passed on a centos7 machine. Maybe it's a syntax-check bug?
Don't think so... cppi: src/qemu/qemu_driver.c: line 3269: not properly indented maint.mk: incorrect preprocessor indentation cfg.mk:680: recipe for target 'sc_preprocessor_indentation' failed make: *** [sc_preprocessor_indentation] Error 1 make: *** Waiting for unfinished jobs.... Line 3269: # define VIR_QEMU_COMPRESS_CHECK(val, type) \ do { \ if (cfg->val) { ... If the "# define" is changed to "#define", then the syntax-check passes. The usage of "# define" is done/allowed with an "#if" or "#ifdef" type construct in order to 'mark' that we're within some sort of preprocessor condition. Additionally those lines are too long - use 80 character columns John

At 2016-09-22 19:05:33, "John Ferlan" <jferlan@redhat.com> wrote:
BTW: Patch 2 fails syntax-check
I make syntax-check again and passed on a centos7 machine. Maybe it's a syntax-check bug?
Don't think so...
cppi: src/qemu/qemu_driver.c: line 3269: not properly indented maint.mk: incorrect preprocessor indentation cfg.mk:680: recipe for target 'sc_preprocessor_indentation' failed make: *** [sc_preprocessor_indentation] Error 1 make: *** Waiting for unfinished jobs....
I didn't install cppi on that centos7 machine. Sorry for the noise.
Line 3269:
# define VIR_QEMU_COMPRESS_CHECK(val, type) \ do { \ if (cfg->val) {
...
If the "# define" is changed to "#define", then the syntax-check passes. The usage of "# define" is done/allowed with an "#if" or "#ifdef" type construct in order to 'mark' that we're within some sort of preprocessor condition.
Additionally those lines are too long - use 80 character columns
I need to re-read HACKING :) Thanks for your help. Regards, - Chen
participants (2)
-
Chen Hanxiao
-
John Ferlan