mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
util: move virStorageFileBackend code into storage_file
It's used only by storage file code so it doesn't make sense to have it in util directory. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
@@ -90,7 +90,6 @@ util_sources = [
|
||||
'virsocketaddr.c',
|
||||
'virstorageencryption.c',
|
||||
'virstoragefile.c',
|
||||
'virstoragefilebackend.c',
|
||||
'virstoragefileprobe.c',
|
||||
'virstring.c',
|
||||
'virsysinfo.c',
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
/*
|
||||
* virstoragefilebackend.c: internal storage source backend contract
|
||||
*
|
||||
* Copyright (C) 2007-2018 Red Hat, Inc.
|
||||
* Copyright (C) 2007-2008 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "datatypes.h"
|
||||
#include "virerror.h"
|
||||
#include "viralloc.h"
|
||||
#include "internal.h"
|
||||
#include "virstoragefilebackend.h"
|
||||
#include "virlog.h"
|
||||
#include "virmodule.h"
|
||||
#include "virfile.h"
|
||||
#include "configmake.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_STORAGE
|
||||
|
||||
VIR_LOG_INIT("storage.storage_source_backend");
|
||||
|
||||
#define VIR_STORAGE_BACKENDS_MAX 20
|
||||
|
||||
static virStorageFileBackendPtr virStorageFileBackends[VIR_STORAGE_BACKENDS_MAX];
|
||||
static size_t virStorageFileBackendsCount;
|
||||
|
||||
#if WITH_STORAGE_DIR || WITH_STORAGE_FS || WITH_STORAGE_GLUSTER
|
||||
|
||||
# define STORAGE_FILE_MODULE_DIR LIBDIR "/libvirt/storage-file"
|
||||
|
||||
static int
|
||||
virStorageFileLoadBackendModule(const char *name,
|
||||
const char *regfunc,
|
||||
bool forceload)
|
||||
{
|
||||
g_autofree char *modfile = NULL;
|
||||
int ret;
|
||||
|
||||
if (!(modfile = virFileFindResourceFull(name,
|
||||
"libvirt_storage_file_",
|
||||
VIR_FILE_MODULE_EXT,
|
||||
abs_top_builddir "/src",
|
||||
STORAGE_FILE_MODULE_DIR,
|
||||
"LIBVIRT_STORAGE_FILE_DIR")))
|
||||
return -1;
|
||||
|
||||
ret = virModuleLoad(modfile, regfunc, forceload);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* WITH_STORAGE_DIR || WITH_STORAGE_FS || WITH_STORAGE_GLUSTER */
|
||||
|
||||
static int virStorageFileBackendOnceInit(void)
|
||||
{
|
||||
#if WITH_STORAGE_DIR || WITH_STORAGE_FS
|
||||
if (virStorageFileLoadBackendModule("fs", "virStorageFileFsRegister", false) < 0)
|
||||
return -1;
|
||||
#endif /* WITH_STORAGE_DIR || WITH_STORAGE_FS */
|
||||
#if WITH_STORAGE_GLUSTER
|
||||
if (virStorageFileLoadBackendModule("gluster", "virStorageFileGlusterRegister", false) < 0)
|
||||
return -1;
|
||||
#endif /* WITH_STORAGE_GLUSTER */
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIR_ONCE_GLOBAL_INIT(virStorageFileBackend);
|
||||
|
||||
int
|
||||
virStorageFileBackendRegister(virStorageFileBackendPtr backend)
|
||||
{
|
||||
VIR_DEBUG("Registering storage file backend '%s' protocol '%s'",
|
||||
virStorageTypeToString(backend->type),
|
||||
virStorageNetProtocolTypeToString(backend->protocol));
|
||||
|
||||
if (virStorageFileBackendsCount >= VIR_STORAGE_BACKENDS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Too many drivers, cannot register storage file "
|
||||
"backend '%s'"),
|
||||
virStorageTypeToString(backend->type));
|
||||
return -1;
|
||||
}
|
||||
|
||||
virStorageFileBackends[virStorageFileBackendsCount] = backend;
|
||||
virStorageFileBackendsCount++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
virStorageFileBackendForType(int type,
|
||||
int protocol,
|
||||
bool required,
|
||||
virStorageFileBackendPtr *backend)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
*backend = NULL;
|
||||
|
||||
if (virStorageFileBackendInitialize() < 0)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < virStorageFileBackendsCount; i++) {
|
||||
if (virStorageFileBackends[i]->type == type) {
|
||||
if (type == VIR_STORAGE_TYPE_NETWORK &&
|
||||
virStorageFileBackends[i]->protocol != protocol)
|
||||
continue;
|
||||
|
||||
*backend = virStorageFileBackends[i];
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!required)
|
||||
return 0;
|
||||
|
||||
if (type == VIR_STORAGE_TYPE_NETWORK) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("missing storage backend for network files "
|
||||
"using %s protocol"),
|
||||
virStorageNetProtocolTypeToString(protocol));
|
||||
} else {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("missing storage backend for '%s' storage"),
|
||||
virStorageTypeToString(type));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
/*
|
||||
* virstoragefilebackend.h: internal storage source backend contract
|
||||
*
|
||||
* Copyright (C) 2007-2018 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "virstoragefile.h"
|
||||
|
||||
/* ------- virStorageFile backends ------------ */
|
||||
typedef struct _virStorageFileBackend virStorageFileBackend;
|
||||
typedef virStorageFileBackend *virStorageFileBackendPtr;
|
||||
|
||||
typedef struct _virStorageDriverData virStorageDriverData;
|
||||
typedef virStorageDriverData *virStorageDriverDataPtr;
|
||||
struct _virStorageDriverData {
|
||||
virStorageFileBackendPtr backend;
|
||||
void *priv;
|
||||
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
};
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendInit)(virStorageSourcePtr src);
|
||||
|
||||
typedef void
|
||||
(*virStorageFileBackendDeinit)(virStorageSourcePtr src);
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendCreate)(virStorageSourcePtr src);
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendUnlink)(virStorageSourcePtr src);
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendStat)(virStorageSourcePtr src,
|
||||
struct stat *st);
|
||||
|
||||
typedef ssize_t
|
||||
(*virStorageFileBackendRead)(virStorageSourcePtr src,
|
||||
size_t offset,
|
||||
size_t len,
|
||||
char **buf);
|
||||
|
||||
typedef const char *
|
||||
(*virStorageFileBackendGetUniqueIdentifier)(virStorageSourcePtr src);
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendAccess)(virStorageSourcePtr src,
|
||||
int mode);
|
||||
|
||||
typedef int
|
||||
(*virStorageFileBackendChown)(const virStorageSource *src,
|
||||
uid_t uid,
|
||||
gid_t gid);
|
||||
|
||||
int virStorageFileBackendForType(int type,
|
||||
int protocol,
|
||||
bool required,
|
||||
virStorageFileBackendPtr *backend);
|
||||
|
||||
struct _virStorageFileBackend {
|
||||
int type;
|
||||
int protocol;
|
||||
|
||||
/* All storage file callbacks may be omitted if not implemented */
|
||||
|
||||
/* The following group of callbacks is expected to set a libvirt
|
||||
* error on failure. */
|
||||
virStorageFileBackendInit backendInit;
|
||||
virStorageFileBackendDeinit backendDeinit;
|
||||
virStorageFileBackendRead storageFileRead;
|
||||
virStorageFileBackendGetUniqueIdentifier storageFileGetUniqueIdentifier;
|
||||
|
||||
/* The following group of callbacks is expected to set errno
|
||||
* and return -1 on error. No libvirt error shall be reported */
|
||||
virStorageFileBackendCreate storageFileCreate;
|
||||
virStorageFileBackendUnlink storageFileUnlink;
|
||||
virStorageFileBackendStat storageFileStat;
|
||||
virStorageFileBackendAccess storageFileAccess;
|
||||
virStorageFileBackendChown storageFileChown;
|
||||
};
|
||||
|
||||
int virStorageFileBackendRegister(virStorageFileBackendPtr backend);
|
||||
Reference in New Issue
Block a user