lock_driver_sanlock: Avoid global driver variable whenever possible

Global variables are bad, we should avoid using them.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2016-09-15 13:18:13 +02:00
parent ff3112f3dc
commit 78da4296a6

View File

@ -80,7 +80,7 @@ struct _virLockManagerSanlockDriver {
gid_t group; gid_t group;
}; };
static virLockManagerSanlockDriver *driver; static virLockManagerSanlockDriverPtr sanlockDriver;
struct _virLockManagerSanlockPrivate { struct _virLockManagerSanlockPrivate {
const char *vm_uri; const char *vm_uri;
@ -100,7 +100,9 @@ struct _virLockManagerSanlockPrivate {
/* /*
* sanlock plugin for the libvirt virLockManager API * sanlock plugin for the libvirt virLockManager API
*/ */
static int virLockManagerSanlockLoadConfig(const char *configFile) static int
virLockManagerSanlockLoadConfig(virLockManagerSanlockDriverPtr driver,
const char *configFile)
{ {
virConfPtr conf; virConfPtr conf;
int ret = -1; int ret = -1;
@ -161,7 +163,8 @@ static int virLockManagerSanlockLoadConfig(const char *configFile)
/* How many times try adding a lockspace? */ /* How many times try adding a lockspace? */
#define LOCKSPACE_RETRIES 10 #define LOCKSPACE_RETRIES 10
static int virLockManagerSanlockSetupLockspace(void) static int
virLockManagerSanlockSetupLockspace(virLockManagerSanlockDriverPtr driver)
{ {
int fd = -1; int fd = -1;
struct stat st; struct stat st;
@ -371,16 +374,20 @@ static int virLockManagerSanlockInit(unsigned int version,
const char *configFile, const char *configFile,
unsigned int flags) unsigned int flags)
{ {
virLockManagerSanlockDriverPtr driver;
VIR_DEBUG("version=%u configFile=%s flags=%x", VIR_DEBUG("version=%u configFile=%s flags=%x",
version, NULLSTR(configFile), flags); version, NULLSTR(configFile), flags);
virCheckFlags(0, -1); virCheckFlags(0, -1);
if (driver) if (sanlockDriver)
return 0; return 0;
if (VIR_ALLOC(driver) < 0) if (VIR_ALLOC(sanlockDriver) < 0)
return -1; return -1;
driver = sanlockDriver;
driver->requireLeaseForDisks = true; driver->requireLeaseForDisks = true;
driver->hostID = 0; driver->hostID = 0;
driver->autoDiskLease = false; driver->autoDiskLease = false;
@ -392,7 +399,7 @@ static int virLockManagerSanlockInit(unsigned int version,
goto error; goto error;
} }
if (virLockManagerSanlockLoadConfig(configFile) < 0) if (virLockManagerSanlockLoadConfig(driver, configFile) < 0)
goto error; goto error;
if (driver->autoDiskLease && !driver->hostID) { if (driver->autoDiskLease && !driver->hostID) {
@ -402,7 +409,7 @@ static int virLockManagerSanlockInit(unsigned int version,
} }
if (driver->autoDiskLease) { if (driver->autoDiskLease) {
if (virLockManagerSanlockSetupLockspace() < 0) if (virLockManagerSanlockSetupLockspace(driver) < -1)
goto error; goto error;
} }
@ -415,11 +422,11 @@ static int virLockManagerSanlockInit(unsigned int version,
static int virLockManagerSanlockDeinit(void) static int virLockManagerSanlockDeinit(void)
{ {
if (!driver) if (!sanlockDriver)
return 0; return 0;
VIR_FREE(driver->autoDiskLeasePath); VIR_FREE(sanlockDriver->autoDiskLeasePath);
VIR_FREE(driver); VIR_FREE(sanlockDriver);
return 0; return 0;
} }
@ -438,7 +445,7 @@ static int virLockManagerSanlockNew(virLockManagerPtr lock,
virCheckFlags(VIR_LOCK_MANAGER_NEW_STARTED, -1); virCheckFlags(VIR_LOCK_MANAGER_NEW_STARTED, -1);
if (!driver) { if (!sanlockDriver) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Sanlock plugin is not initialized")); _("Sanlock plugin is not initialized"));
return -1; return -1;
@ -566,11 +573,13 @@ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
static int virLockManagerSanlockAddDisk(virLockManagerPtr lock, static int
const char *name, virLockManagerSanlockAddDisk(virLockManagerSanlockDriverPtr driver,
size_t nparams, virLockManagerPtr lock,
virLockManagerParamPtr params ATTRIBUTE_UNUSED, const char *name,
bool shared) size_t nparams,
virLockManagerParamPtr params ATTRIBUTE_UNUSED,
bool shared)
{ {
virLockManagerSanlockPrivatePtr priv = lock->privateData; virLockManagerSanlockPrivatePtr priv = lock->privateData;
int ret = -1; int ret = -1;
@ -631,7 +640,9 @@ static int virLockManagerSanlockAddDisk(virLockManagerPtr lock,
} }
static int virLockManagerSanlockCreateLease(struct sanlk_resource *res) static int
virLockManagerSanlockCreateLease(virLockManagerSanlockDriverPtr driver,
struct sanlk_resource *res)
{ {
int fd = -1; int fd = -1;
struct stat st; struct stat st;
@ -719,6 +730,7 @@ static int virLockManagerSanlockAddResource(virLockManagerPtr lock,
virLockManagerParamPtr params, virLockManagerParamPtr params,
unsigned int flags) unsigned int flags)
{ {
virLockManagerSanlockDriverPtr driver = sanlockDriver;
virLockManagerSanlockPrivatePtr priv = lock->privateData; virLockManagerSanlockPrivatePtr priv = lock->privateData;
virCheckFlags(VIR_LOCK_MANAGER_RESOURCE_READONLY | virCheckFlags(VIR_LOCK_MANAGER_RESOURCE_READONLY |
@ -738,11 +750,12 @@ static int virLockManagerSanlockAddResource(virLockManagerPtr lock,
switch (type) { switch (type) {
case VIR_LOCK_MANAGER_RESOURCE_TYPE_DISK: case VIR_LOCK_MANAGER_RESOURCE_TYPE_DISK:
if (driver->autoDiskLease) { if (driver->autoDiskLease) {
if (virLockManagerSanlockAddDisk(lock, name, nparams, params, if (virLockManagerSanlockAddDisk(driver, lock, name, nparams, params,
!!(flags & VIR_LOCK_MANAGER_RESOURCE_SHARED)) < 0) !!(flags & VIR_LOCK_MANAGER_RESOURCE_SHARED)) < 0)
return -1; return -1;
if (virLockManagerSanlockCreateLease(priv->res_args[priv->res_count-1]) < 0) if (virLockManagerSanlockCreateLease(driver,
priv->res_args[priv->res_count-1]) < 0)
return -1; return -1;
} else { } else {
if (!(flags & (VIR_LOCK_MANAGER_RESOURCE_SHARED | if (!(flags & (VIR_LOCK_MANAGER_RESOURCE_SHARED |
@ -868,6 +881,7 @@ static int virLockManagerSanlockAcquire(virLockManagerPtr lock,
virDomainLockFailureAction action, virDomainLockFailureAction action,
int *fd) int *fd)
{ {
virLockManagerSanlockDriverPtr driver = sanlockDriver;
virLockManagerSanlockPrivatePtr priv = lock->privateData; virLockManagerSanlockPrivatePtr priv = lock->privateData;
struct sanlk_options *opt = NULL; struct sanlk_options *opt = NULL;
struct sanlk_resource **res_args; struct sanlk_resource **res_args;