提交 adb182fa 编写于 作者: J John Ferlan

scsi: Adjust return value for virStorageBackendSCSINewLun

Use virStorageBackendPoolUseDevPath API to determine whether creation of
stable target path is possible for the volume.

This will differentiate a failed virStorageBackendStablePath which won't
need to be fatal. Thus, we'll add a -2 return value to differentiate that
the failure was a result of either the inability to find the symlink for
the device or failure to open the target path directory
上级 9e5e1ca1
...@@ -146,6 +146,16 @@ virStorageBackendSCSISerial(const char *dev) ...@@ -146,6 +146,16 @@ virStorageBackendSCSISerial(const char *dev)
} }
/*
* Attempt to create a new LUN
*
* Returns:
*
* 0 => Success
* -1 => Failure due to some sort of OOM or other fatal issue found when
* attempting to get/update information about a found volume
* -2 => Failure to find a stable path, not fatal, caller can try another
*/
static int static int
virStorageBackendSCSINewLun(virStoragePoolObjPtr pool, virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
uint32_t host ATTRIBUTE_UNUSED, uint32_t host ATTRIBUTE_UNUSED,
...@@ -158,6 +168,22 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool, ...@@ -158,6 +168,22 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
char *devpath = NULL; char *devpath = NULL;
int retval = -1; int retval = -1;
/* Check if the pool is using a stable target path. The call to
* virStorageBackendStablePath will fail if the pool target path
* isn't stable and just return the strdup'd 'devpath' anyway.
* This would be indistinguishable to failing to find the stable
* path to the device if the virDirRead loop to search the
* target pool path for our devpath had failed.
*/
if (!virStorageBackendPoolPathIsStable(pool->def->target.path) &&
!(STREQ(pool->def->target.path, "/dev") ||
STREQ(pool->def->target.path, "/dev/"))) {
virReportError(VIR_ERR_INVALID_ARG,
_("unable to use target path '%s' for dev '%s'"),
NULLSTR(pool->def->target.path), dev);
goto cleanup;
}
if (VIR_ALLOC(vol) < 0) if (VIR_ALLOC(vol) < 0)
goto cleanup; goto cleanup;
...@@ -194,6 +220,7 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool, ...@@ -194,6 +220,7 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
VIR_DEBUG("No stable path found for '%s' in '%s'", VIR_DEBUG("No stable path found for '%s' in '%s'",
devpath, pool->def->target.path); devpath, pool->def->target.path);
retval = -2;
goto cleanup; goto cleanup;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册