qemu: introduce struct _virQEMUCapsCachePriv

This will store private data that will be used by following patches
when switching to virFileCache.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Pavel Hrdina 2017-06-20 16:17:23 +02:00
parent 478f0c5b85
commit 731cfd5fe8
2 changed files with 39 additions and 24 deletions

View File

@ -3774,6 +3774,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
}
static void
virQEMUCapsCachePrivFree(virQEMUCapsCachePrivPtr priv)
{
VIR_FREE(priv->libDir);
VIR_FREE(priv);
}
/*
* Parsing a doc that looks like
*
@ -4262,8 +4270,7 @@ virQEMUCapsRememberCached(virQEMUCapsPtr qemuCaps, const char *cacheDir)
static bool
virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
uid_t runUid,
gid_t runGid)
virQEMUCapsCachePrivPtr priv)
{
bool kvmUsable;
struct stat sb;
@ -4300,7 +4307,7 @@ virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
}
kvmUsable = virFileAccessibleAs("/dev/kvm", R_OK | W_OK,
runUid, runGid) == 0;
priv->runUid, priv->runGid) == 0;
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_ENABLE_KVM) &&
@ -4328,8 +4335,7 @@ virQEMUCapsInitCached(virCapsPtr caps,
virQEMUCapsPtr *qemuCaps,
const char *binary,
const char *cacheDir,
uid_t runUid,
gid_t runGid)
virQEMUCapsCachePrivPtr priv)
{
char *capsdir = NULL;
char *capsfile = NULL;
@ -4380,7 +4386,7 @@ virQEMUCapsInitCached(virCapsPtr caps,
goto discard;
}
if (!virQEMUCapsIsValid(qemuCapsNew, runUid, runGid))
if (!virQEMUCapsIsValid(qemuCapsNew, priv))
goto discard;
VIR_DEBUG("Loaded '%s' for '%s' ctime %lld usedQMP=%d",
@ -5285,22 +5291,21 @@ virQEMUCapsNewForBinaryInternal(virCapsPtr caps,
static virQEMUCapsPtr
virQEMUCapsNewForBinary(virCapsPtr caps,
const char *binary,
const char *libDir,
const char *cacheDir,
uid_t runUid,
gid_t runGid)
virQEMUCapsCachePrivPtr priv)
{
int rv;
virQEMUCapsPtr qemuCaps = NULL;
if ((rv = virQEMUCapsInitCached(caps, &qemuCaps, binary, cacheDir,
runUid, runGid)) < 0)
if ((rv = virQEMUCapsInitCached(caps, &qemuCaps, binary, cacheDir, priv)) < 0)
goto error;
if (rv == 0) {
if (!(qemuCaps = virQEMUCapsNewForBinaryInternal(caps, binary,
libDir, runUid,
runGid, false))) {
priv->libDir,
priv->runUid,
priv->runGid,
false))) {
goto error;
}
@ -5374,13 +5379,17 @@ virQEMUCapsCacheNew(const char *libDir,
if (!(cache->binaries = virHashCreate(10, virObjectFreeHashData)))
goto error;
if (VIR_STRDUP(cache->libDir, libDir) < 0)
goto error;
if (VIR_STRDUP(cache->cacheDir, cacheDir) < 0)
goto error;
cache->runUid = runUid;
cache->runGid = runGid;
if (VIR_ALLOC(cache->priv) < 0)
goto error;
if (VIR_STRDUP(cache->priv->libDir, libDir) < 0)
goto error;
cache->priv->runUid = runUid;
cache->priv->runGid = runGid;
return cache;
@ -5397,7 +5406,7 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
virQEMUCapsPtr *qemuCaps)
{
if (*qemuCaps &&
!virQEMUCapsIsValid(*qemuCaps, cache->runUid, cache->runGid)) {
!virQEMUCapsIsValid(*qemuCaps, cache->priv)) {
VIR_DEBUG("Cached capabilities %p no longer valid for %s",
*qemuCaps, binary);
virHashRemoveEntry(cache->binaries, binary);
@ -5407,8 +5416,8 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
if (!*qemuCaps) {
VIR_DEBUG("Creating capabilities for %s", binary);
*qemuCaps = virQEMUCapsNewForBinary(caps, binary,
cache->libDir, cache->cacheDir,
cache->runUid, cache->runGid);
cache->cacheDir,
cache->priv);
if (*qemuCaps) {
VIR_DEBUG("Caching capabilities %p for %s", *qemuCaps, binary);
if (virHashAddEntry(cache->binaries, binary, *qemuCaps) < 0) {
@ -5527,7 +5536,7 @@ virQEMUCapsCacheFree(virQEMUCapsCachePtr cache)
if (!cache)
return;
VIR_FREE(cache->libDir);
virQEMUCapsCachePrivFree(cache->priv);
VIR_FREE(cache->cacheDir);
virHashFree(cache->binaries);
virMutexDestroy(&cache->lock);

View File

@ -28,13 +28,19 @@
#ifndef __QEMU_CAPSPRIV_H__
# define __QEMU_CAPSPRIV_H__
struct _virQEMUCapsCachePriv {
char *libDir;
uid_t runUid;
gid_t runGid;
};
typedef struct _virQEMUCapsCachePriv virQEMUCapsCachePriv;
typedef virQEMUCapsCachePriv *virQEMUCapsCachePrivPtr;
struct _virQEMUCapsCache {
virMutex lock;
virHashTablePtr binaries;
char *libDir;
char *cacheDir;
uid_t runUid;
gid_t runGid;
virQEMUCapsCachePrivPtr priv;
};
virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps);