On Mon, Jul 23, 2018 at 08:43:00PM +0200, clem@xxxxxxxxxxxx wrote: > From: Clementine Hayat <clem@xxxxxxxxxxxx> > > Introducing the pool as a noop. Integration inside the build > system. Implementation will be in the following commits. > > Signed-off-by: Clementine Hayat <clem@xxxxxxxxxxxx> > --- > 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
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list