[libvirt] [PATCH v2 6/6] iscsi: Add checks for non standard stable target.path

John Ferlan jferlan at redhat.com
Wed Apr 1 17:29:11 UTC 2015


https://bugzilla.redhat.com/show_bug.cgi?id=1171933

If a non stable path is provided for the pool's target path, check to
see if the directory exists before allowing pool startup; otherwise,
later in the processLU calls to find LUN's all that happens is the
volume target.path will get the strdup'd value of the pool target.path
(which doesn't exist), so attempts to find the LU are unsuccessful
resulting in a started pool with no devices listed even though the
block devices for the iSCSI LU's do exist.

Additionally if the non stable path does exist and it's determined no
targets are found, then force failure in the refresh path.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/storage/storage_backend_iscsi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c
index fba037f..b5a15b1 100644
--- a/src/storage/storage_backend_iscsi.c
+++ b/src/storage/storage_backend_iscsi.c
@@ -149,6 +149,15 @@ virStorageBackendISCSIFindLUs(virStoragePoolObjPtr pool,
     if (virStorageBackendSCSIFindLUs(pool, host) < 0)
         goto cleanup;
 
+    if (pool->volumes.count == 0 &&
+        !STRPREFIX(pool->def->target.path, "/dev")) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("Non stable target path '%s' for pool '%s' "
+                         "found no target volumes"),
+                       pool->def->target.path, pool->def->name);
+        return -1;
+    }
+
     retval = 0;
 
  cleanup:
@@ -393,6 +402,15 @@ virStorageBackendISCSIStartPool(virConnectPtr conn,
         return -1;
     }
 
+    if (!STRPREFIX(pool->def->target.path, "/dev") &&
+        !virFileExists(pool->def->target.path)) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("Non stable target path '%s' not found for pool '%s'"),
+                       pool->def->target.path, pool->def->name);
+        return -1;
+    }
+
+
     if ((session = virStorageBackendISCSISession(pool, true)) == NULL) {
         if ((portal = virStorageBackendISCSIPortal(&pool->def->source)) == NULL)
             goto cleanup;
-- 
2.1.0




More information about the libvir-list mailing list