mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-30 17:45:23 +00:00
storage: Add timeout for iscsi volume's stable path discovery
It might need some time till the LUN's stable path shows up on
initiator host, and although the time window is not foreseeable,
as a better than nothing fix, this patch adds timeout for the
stable path discovery process.
(cherry picked from commit de7f0774c3
)
This commit is contained in:
parent
acb169d0a1
commit
aa9f65c869
@ -1347,6 +1347,7 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
|
|||||||
struct dirent *dent;
|
struct dirent *dent;
|
||||||
char *stablepath;
|
char *stablepath;
|
||||||
int opentries = 0;
|
int opentries = 0;
|
||||||
|
int retry = 0;
|
||||||
|
|
||||||
/* Short circuit if pool has no target, or if its /dev */
|
/* Short circuit if pool has no target, or if its /dev */
|
||||||
if (pool->def->target.path == NULL ||
|
if (pool->def->target.path == NULL ||
|
||||||
@ -1355,7 +1356,7 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
|
|||||||
goto ret_strdup;
|
goto ret_strdup;
|
||||||
|
|
||||||
/* Skip whole thing for a pool which isn't in /dev
|
/* Skip whole thing for a pool which isn't in /dev
|
||||||
* so we don't mess will filesystem/dir based pools
|
* so we don't mess filesystem/dir based pools
|
||||||
*/
|
*/
|
||||||
if (!STRPREFIX(pool->def->target.path, "/dev"))
|
if (!STRPREFIX(pool->def->target.path, "/dev"))
|
||||||
goto ret_strdup;
|
goto ret_strdup;
|
||||||
@ -1384,8 +1385,12 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
|
|||||||
/* The pool is pointing somewhere like /dev/disk/by-path
|
/* The pool is pointing somewhere like /dev/disk/by-path
|
||||||
* or /dev/disk/by-id, so we need to check all symlinks in
|
* or /dev/disk/by-id, so we need to check all symlinks in
|
||||||
* the target directory and figure out which one points
|
* the target directory and figure out which one points
|
||||||
* to this device node
|
* to this device node.
|
||||||
|
*
|
||||||
|
* And it might need some time till the stabe path shows
|
||||||
|
* up, so add timeout to retry here.
|
||||||
*/
|
*/
|
||||||
|
retry:
|
||||||
while ((dent = readdir(dh)) != NULL) {
|
while ((dent = readdir(dh)) != NULL) {
|
||||||
if (dent->d_name[0] == '.')
|
if (dent->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
@ -1406,6 +1411,11 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
|
|||||||
VIR_FREE(stablepath);
|
VIR_FREE(stablepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (++retry < 100) {
|
||||||
|
usleep(100 * 1000);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
closedir(dh);
|
closedir(dh);
|
||||||
|
|
||||||
ret_strdup:
|
ret_strdup:
|
||||||
|
Loading…
Reference in New Issue
Block a user