
On Mon, Jul 10, 2017 at 14:46:46 +0200, Pavel Hrdina wrote:
It's not required and following patches will change the code.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- src/qemu/qemu_capabilities.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4d8890aaaf..4d26e04fc3 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4284,11 +4284,11 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps)
static bool virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps, - time_t qemuctime, uid_t runUid, gid_t runGid) { bool kvmUsable; + struct stat sb;
if (!qemuCaps->binary) return true; @@ -4305,24 +4305,19 @@ virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps, return false; }
- if (!qemuctime) { - struct stat sb; - - if (stat(qemuCaps->binary, &sb) < 0) { - char ebuf[1024]; - VIR_DEBUG("Failed to stat QEMU binary '%s': %s", - qemuCaps->binary, - virStrerror(errno, ebuf, sizeof(ebuf))); - return false; - } - qemuctime = sb.st_ctime; + if (stat(qemuCaps->binary, &sb) < 0) { + char ebuf[1024]; + VIR_DEBUG("Failed to stat QEMU binary '%s': %s", + qemuCaps->binary, + virStrerror(errno, ebuf, sizeof(ebuf))); + return false; }
- if (qemuctime != qemuCaps->ctime) { + if (sb.st_ctime != qemuCaps->ctime) { VIR_DEBUG("Outdated capabilities for '%s': QEMU binary changed " "(%lld vs %lld)", qemuCaps->binary, - (long long) qemuctime, (long long) qemuCaps->ctime); + (long long) sb.st_ctime, (long long) qemuCaps->ctime); return false; }
@@ -4362,7 +4357,6 @@ virQEMUCapsInitCached(virCapsPtr caps, int ret = -1; char *binaryhash = NULL; struct stat sb; - time_t qemuctime = qemuCaps->ctime;
if (virAsprintf(&capsdir, "%s/capabilities", cacheDir) < 0) goto cleanup;
This hunk is wrong or you are missing some code which would handle this differently. virQEMUCapsNewForBinaryInternal sets qemuCaps->ctime and calls virQEMUCapsInitCached, which tries to load cached data in qemuCaps. Once loaded from the cache, qemuCaps->ctime is set to the cached one and if the cache is found to be invalid, the cached ctime remains stored in qemuCaps->ctime instead of the real one.
@@ -4402,7 +4396,7 @@ virQEMUCapsInitCached(virCapsPtr caps, goto discard; }
- if (!virQEMUCapsIsValid(qemuCaps, qemuctime, runUid, runGid)) + if (!virQEMUCapsIsValid(qemuCaps, runUid, runGid)) goto discard;
VIR_DEBUG("Loaded '%s' for '%s' ctime %lld usedQMP=%d", @@ -4411,7 +4405,6 @@ virQEMUCapsInitCached(virCapsPtr caps,
ret = 1; cleanup: - qemuCaps->ctime = qemuctime; VIR_FREE(binaryhash); VIR_FREE(capsfile); VIR_FREE(capsdir);
And this hunk is wrong too. However, the next patch fixes the code and these two hunks are not needed anymore. Just move the hunks from 7/11 to 8/11.
@@ -5413,7 +5406,7 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache, virQEMUCapsPtr *qemuCaps) { if (*qemuCaps && - !virQEMUCapsIsValid(*qemuCaps, 0, cache->runUid, cache->runGid)) { + !virQEMUCapsIsValid(*qemuCaps, cache->runUid, cache->runGid)) { VIR_DEBUG("Cached capabilities %p no longer valid for %s", *qemuCaps, binary); virHashRemoveEntry(cache->binaries, binary);
The rest of the patch looks OK. Jirka