[libvirt] [PATCH v2 6/6] iscsi: Add checks for non standard stable target.path
Ján Tomko
jtomko at redhat.com
Thu Apr 2 11:46:06 UTC 2015
On Wed, Apr 01, 2015 at 01:29:11PM -0400, John Ferlan wrote:
> 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,
The only non-stable path that can possibly result in a non-empty pool is '/dev/'.
> 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 &&
This is always true if the path does not start with /dev.
https://www.redhat.com/archives/libvir-list/2015-March/msg01578.html
> + !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)) {
If you remove the virFileExists condition, you don't need the error
check in the first hunk.
Jan
> + 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150402/869c3395/attachment-0001.sig>
More information about the libvir-list
mailing list