mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
util: move virStorageFileGetLVMKey to locking
The function doesn't take virStorageSource as argument and has nothing in common with virStorageSource or storage file. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
fd90641d96
commit
780aa25fad
@ -3135,7 +3135,6 @@ virStorageFileFeatureTypeToString;
|
||||
virStorageFileFormatTypeFromString;
|
||||
virStorageFileFormatTypeToString;
|
||||
virStorageFileGetBackingStoreStr;
|
||||
virStorageFileGetLVMKey;
|
||||
virStorageFileGetMetadata;
|
||||
virStorageFileGetMetadataFromBuf;
|
||||
virStorageFileGetMetadataFromFD;
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "lock_driver.h"
|
||||
#include "virconf.h"
|
||||
#include "viralloc.h"
|
||||
#include "vircommand.h"
|
||||
#include "vircrypto.h"
|
||||
#include "virlog.h"
|
||||
#include "viruuid.h"
|
||||
@ -455,6 +456,71 @@ static int virLockManagerLockDaemonNew(virLockManagerPtr lock,
|
||||
}
|
||||
|
||||
|
||||
#ifdef LVS
|
||||
static int
|
||||
virLockManagerGetLVMKey(const char *path,
|
||||
char **key)
|
||||
{
|
||||
/*
|
||||
* # lvs --noheadings --unbuffered --nosuffix --options "uuid" LVNAME
|
||||
* 06UgP5-2rhb-w3Bo-3mdR-WeoL-pytO-SAa2ky
|
||||
*/
|
||||
int status;
|
||||
int ret = -1;
|
||||
g_autoptr(virCommand) cmd = NULL;
|
||||
|
||||
cmd = virCommandNewArgList(LVS, "--noheadings",
|
||||
"--unbuffered", "--nosuffix",
|
||||
"--options", "uuid", path,
|
||||
NULL
|
||||
);
|
||||
*key = NULL;
|
||||
|
||||
/* Run the program and capture its output */
|
||||
virCommandSetOutputBuffer(cmd, key);
|
||||
if (virCommandRun(cmd, &status) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* Explicitly check status == 0, rather than passing NULL
|
||||
* to virCommandRun because we don't want to raise an actual
|
||||
* error in this scenario, just return a NULL key.
|
||||
*/
|
||||
|
||||
if (status == 0 && *key) {
|
||||
char *nl;
|
||||
char *tmp = *key;
|
||||
|
||||
/* Find first non-space character */
|
||||
while (*tmp && g_ascii_isspace(*tmp))
|
||||
tmp++;
|
||||
/* Kill leading spaces */
|
||||
if (tmp != *key)
|
||||
memmove(*key, tmp, strlen(tmp)+1);
|
||||
|
||||
/* Kill trailing newline */
|
||||
if ((nl = strchr(*key, '\n')))
|
||||
*nl = '\0';
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (*key && STREQ(*key, ""))
|
||||
VIR_FREE(*key);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
virLockManagerGetLVMKey(const char *path,
|
||||
char **key G_GNUC_UNUSED)
|
||||
{
|
||||
virReportSystemError(ENOSYS, _("Unable to get LVM key for %s"), path);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock,
|
||||
unsigned int type,
|
||||
const char *name,
|
||||
@ -494,7 +560,7 @@ static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock,
|
||||
if (STRPREFIX(name, "/dev") &&
|
||||
driver->lvmLockSpaceDir) {
|
||||
VIR_DEBUG("Trying to find an LVM UUID for %s", name);
|
||||
if (virStorageFileGetLVMKey(name, &newName) < 0)
|
||||
if (virLockManagerGetLVMKey(name, &newName) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (newName) {
|
||||
|
@ -1251,68 +1251,6 @@ int virStorageFileIsClusterFS(const char *path)
|
||||
VIR_FILE_SHFS_CEPH);
|
||||
}
|
||||
|
||||
#ifdef LVS
|
||||
int virStorageFileGetLVMKey(const char *path,
|
||||
char **key)
|
||||
{
|
||||
/*
|
||||
* # lvs --noheadings --unbuffered --nosuffix --options "uuid" LVNAME
|
||||
* 06UgP5-2rhb-w3Bo-3mdR-WeoL-pytO-SAa2ky
|
||||
*/
|
||||
int status;
|
||||
int ret = -1;
|
||||
g_autoptr(virCommand) cmd = NULL;
|
||||
|
||||
cmd = virCommandNewArgList(LVS, "--noheadings",
|
||||
"--unbuffered", "--nosuffix",
|
||||
"--options", "uuid", path,
|
||||
NULL
|
||||
);
|
||||
*key = NULL;
|
||||
|
||||
/* Run the program and capture its output */
|
||||
virCommandSetOutputBuffer(cmd, key);
|
||||
if (virCommandRun(cmd, &status) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* Explicitly check status == 0, rather than passing NULL
|
||||
* to virCommandRun because we don't want to raise an actual
|
||||
* error in this scenario, just return a NULL key.
|
||||
*/
|
||||
|
||||
if (status == 0 && *key) {
|
||||
char *nl;
|
||||
char *tmp = *key;
|
||||
|
||||
/* Find first non-space character */
|
||||
while (*tmp && g_ascii_isspace(*tmp))
|
||||
tmp++;
|
||||
/* Kill leading spaces */
|
||||
if (tmp != *key)
|
||||
memmove(*key, tmp, strlen(tmp)+1);
|
||||
|
||||
/* Kill trailing newline */
|
||||
if ((nl = strchr(*key, '\n')))
|
||||
*nl = '\0';
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (*key && STREQ(*key, ""))
|
||||
VIR_FREE(*key);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
int virStorageFileGetLVMKey(const char *path,
|
||||
char **key G_GNUC_UNUSED)
|
||||
{
|
||||
virReportSystemError(ENOSYS, _("Unable to get LVM key for %s"), path);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WITH_UDEV
|
||||
/* virStorageFileGetSCSIKey
|
||||
* @path: Path to the SCSI device
|
||||
|
@ -428,8 +428,6 @@ int virStorageFileIsClusterFS(const char *path);
|
||||
bool virStorageIsFile(const char *path);
|
||||
bool virStorageIsRelative(const char *backing);
|
||||
|
||||
int virStorageFileGetLVMKey(const char *path,
|
||||
char **key);
|
||||
int virStorageFileGetSCSIKey(const char *path,
|
||||
char **key,
|
||||
bool ignoreError);
|
||||
|
Loading…
x
Reference in New Issue
Block a user