@SRCDIR@src/storage/storage_backend_zfs.c
@SRCDIR@src/storage/storage_driver.c
@SRCDIR@src/storage/storage_util.c
+@SRCDIR@src/storage_file/storage_file_backend.c
@SRCDIR@src/storage_file/storage_file_backend_fs.c
@SRCDIR@src/storage_file/storage_file_backend_gluster.c
@SRCDIR@src/storage_file/storage_source.c
@SRCDIR@src/util/virsocketaddr.c
@SRCDIR@src/util/virstorageencryption.c
@SRCDIR@src/util/virstoragefile.c
-@SRCDIR@src/util/virstoragefilebackend.c
@SRCDIR@src/util/virstoragefileprobe.c
@SRCDIR@src/util/virstring.c
@SRCDIR@src/util/virsysinfo.c
virSecurityXATTRNamespaceDefined;
+# storage_file/storage_file_backend.h
+virStorageFileBackendRegister;
+
+
# storage_file/storage_source.h
virStorageFileAccess;
virStorageFileChainLookup;
virStorageTypeToString;
-# util/virstoragefilebackend.h
-virStorageFileBackendRegister;
-
-
# util/virstoragefileprobe.h
virStorageFileProbeFormat;
virStorageFileProbeGetMetadata;
storage_file_sources = [
'storage_source.c',
+ 'storage_file_backend.c',
]
stoarge_file_fs_sources = [
--- /dev/null
+/*
+ * storage_file_backend.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 "storage_file_backend.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;
+}
--- /dev/null
+/*
+ * storage_file_backend.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);
#include <fcntl.h>
#include "virerror.h"
+#include "storage_file_backend.h"
#include "storage_file_backend_fs.h"
#include "storage_util.h"
-#include "virstoragefilebackend.h"
#include "vircommand.h"
#include "viralloc.h"
#include "virfile.h"
#include <glusterfs/api/glfs.h>
+#include "storage_file_backend.h"
#include "storage_file_backend_gluster.h"
#include "viralloc.h"
#include "virerror.h"
#include "virlog.h"
#include "virstoragefile.h"
-#include "virstoragefilebackend.h"
#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_STORAGE
#include <unistd.h>
#include "internal.h"
+#include "storage_file_backend.h"
#include "storage_source.h"
#include "viralloc.h"
#include "virerror.h"
#include "virlog.h"
#include "virobject.h"
#include "virstoragefile.h"
-#include "virstoragefilebackend.h"
#include "virstoragefileprobe.h"
#include "virstring.h"
#include "viruri.h"
'virsocketaddr.c',
'virstorageencryption.c',
'virstoragefile.c',
- 'virstoragefilebackend.c',
'virstoragefileprobe.c',
'virstring.c',
'virsysinfo.c',
+++ /dev/null
-/*
- * 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;
-}
+++ /dev/null
-/*
- * 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);