[libvirt] [PATCH v2 2/3] storage: Introduce iscsi_direct pool type
Pavel Hrdina
phrdina at redhat.com
Tue Jul 24 19:11:22 UTC 2018
On Mon, Jul 23, 2018 at 08:43:00PM +0200, clem at lse.epita.fr wrote:
> From: Clementine Hayat <clem at 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 at 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180724/cbe95737/attachment-0001.sig>
More information about the libvir-list
mailing list