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@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list