[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]