
On Mon, Jul 23, 2018 at 08:43:00PM +0200, clem@lse.epita.fr wrote:
From: Clementine Hayat <clem@lse.epita.fr>
Introducing the pool as a noop. Integration inside the build system. Implementation will be in the following commits.
Signed-off-by: Clementine Hayat <clem@lse.epita.fr> --- configure.ac | 6 ++- m4/virt-storage-iscsi-direct.m4 | 41 +++++++++++++++ src/conf/domain_conf.c | 4 ++ src/conf/storage_conf.c | 33 ++++++++++-- src/conf/storage_conf.h | 1 + src/conf/virstorageobj.c | 2 + src/storage/Makefile.inc.am | 22 ++++++++ src/storage/storage_backend.c | 6 +++ src/storage/storage_backend_iscsi_direct.c | 58 ++++++++++++++++++++++ src/storage/storage_backend_iscsi_direct.h | 6 +++ src/storage/storage_driver.c | 1 + tools/virsh-pool.c | 3 ++ 12 files changed, 178 insertions(+), 5 deletions(-) create mode 100644 m4/virt-storage-iscsi-direct.m4 create mode 100644 src/storage/storage_backend_iscsi_direct.c create mode 100644 src/storage/storage_backend_iscsi_direct.h
diff --git a/configure.ac b/configure.ac index c668630a79..87ac4dc2c3 100644 --- a/configure.ac +++ b/configure.ac @@ -564,6 +564,7 @@ LIBVIRT_STORAGE_ARG_DIR LIBVIRT_STORAGE_ARG_FS LIBVIRT_STORAGE_ARG_LVM LIBVIRT_STORAGE_ARG_ISCSI +LIBVIRT_STORAGE_ARG_ISCSI_DIRECT LIBVIRT_STORAGE_ARG_SCSI LIBVIRT_STORAGE_ARG_MPATH LIBVIRT_STORAGE_ARG_DISK @@ -578,6 +579,7 @@ if test "$with_libvirtd" = "no"; then with_storage_fs=no with_storage_lvm=no with_storage_iscsi=no + with_storage_iscsi_direct=no with_storage_scsi=no with_storage_mpath=no with_storage_disk=no @@ -598,6 +600,7 @@ LIBVIRT_STORAGE_CHECK_DIR LIBVIRT_STORAGE_CHECK_FS LIBVIRT_STORAGE_CHECK_LVM LIBVIRT_STORAGE_CHECK_ISCSI +LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT LIBVIRT_STORAGE_CHECK_SCSI LIBVIRT_STORAGE_CHECK_MPATH LIBVIRT_STORAGE_CHECK_DISK @@ -608,7 +611,7 @@ LIBVIRT_STORAGE_CHECK_ZFS LIBVIRT_STORAGE_CHECK_VSTORAGE
with_storage=no -for backend in dir fs lvm iscsi scsi mpath rbd disk; do +for backend in dir fs lvm iscsi iscsi_direct scsi mpath rbd disk; do if eval test \$with_storage_$backend = yes; then with_storage=yes break @@ -936,6 +939,7 @@ LIBVIRT_STORAGE_RESULT_DIR LIBVIRT_STORAGE_RESULT_FS LIBVIRT_STORAGE_RESULT_LVM LIBVIRT_STORAGE_RESULT_ISCSI +LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT LIBVIRT_STORAGE_RESULT_SCSI LIBVIRT_STORAGE_RESULT_MPATH LIBVIRT_STORAGE_RESULT_DISK diff --git a/m4/virt-storage-iscsi-direct.m4 b/m4/virt-storage-iscsi-direct.m4 new file mode 100644 index 0000000000..cc2d490352 --- /dev/null +++ b/m4/virt-storage-iscsi-direct.m4 @@ -0,0 +1,41 @@ +dnl Iscsi-direct storage +dnl +dnl Copyright (C) 2018 Clementine Hayat. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library. If not, see +dnl <http://www.gnu.org/licenses/>. +dnl + +AC_DEFUN([LIBVIRT_STORAGE_ARG_ISCSI_DIRECT], [ + LIBVIRT_ARG_WITH_FEATURE([STORAGE_ISCSI_DIRECT], + [iscsi-direct backend for the storage driver], + [check]) +]) + +AC_DEFUN([LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT], [ + AC_REQUIRE([LIBVIRT_CHECK_LIBISCSI]) + if test "$with_storage_iscsi_direct" = "check"; then + with_storage_iscsi_direct=$with_libiscsi + fi + if test "$with_storage_iscsi_direct" = "yes"; then + AC_DEFINE_UNQUOTED([WITH_STORAGE_ISCSI_DIRECT], [1], + [whether iSCSI backend for storage driver is enabled]) + fi + AM_CONDITIONAL([WITH_STORAGE_ISCSI_DIRECT], + [test "$with_storage_iscsi_direct" = "yes"]) +]) + +AC_DEFUN([LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT], [ + LIBVIRT_RESULT([iscsi-direct], [$with_storage_iscsi_direct]) +]) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7396616eda..5af27a6ad2 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30163,6 +30163,10 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
break;
+ case VIR_STORAGE_POOL_ISCSI_DIRECT: + def->src->srcpool->mode = VIR_STORAGE_SOURCE_POOL_MODE_DIRECT; + break;
This is not exactly what I meant, this will not work. Firstly, we should error out if startupPolicy is set the same way as we do for VIR_STORAGE_POOL_ISCSI. We also need to call all this code to translate the storage pool into domain disk definition: case VIR_STORAGE_SOURCE_POOL_MODE_DIRECT: def->src->srcpool->actualtype = VIR_STORAGE_TYPE_NETWORK; def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI; if (virDomainDiskTranslateSourcePoolAuth(def, &pooldef->source) < 0) goto cleanup; /* Source pool may not fill in the secrettype field, * so we need to do so here */ if (def->src->auth && !def->src->auth->secrettype) { const char *secrettype = virSecretUsageTypeToString(VIR_SECRET_USAGE_TYPE_ISCSI); if (VIR_STRDUP(def->src->auth->secrettype, secrettype) < 0) goto cleanup; } if (virDomainDiskAddISCSIPoolSourceHost(def, pooldef) < 0) goto cleanup; So I would suggest moving that code into separate function and calling that function for VIR_STORAGE_POOL_ISCSI_DIRECT and also in the original place of that code. You can test this part by creating domain with this disk definition: ... <disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='storage-pool-name' volume='storage-volume-name'/> <target dev='vda' bus='virtio'/> </disk> ... Pavel