For virStorageBackendStablePath, in order to make decisions in other code split out the checks regarding whether the pool's target is empty, using /dev, using /dev/, or doesn't start with /dev Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx> --- src/storage/storage_backend.c | 26 +++++++++++++------------- src/storage/storage_backend.h | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index 0435983..b07e0d9 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -1674,6 +1674,17 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target, return 0; } +bool +virStorageBackendPoolPathIsStable(const char *path) +{ + if (path == NULL || STREQ(path, "/dev") || STREQ(path, "/dev/")) + return false; + + if (!STRPREFIX(path, "/dev")) + return false; + + return true; +} /* * Given a volume path directly in /dev/XXX, iterate over the @@ -1703,20 +1714,9 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool, int retry = 0; int direrr; - /* Short circuit if pool has no target, or if its /dev */ - if (pool->def->target.path == NULL || - STREQ(pool->def->target.path, "/dev") || - STREQ(pool->def->target.path, "/dev/")) - goto ret_strdup; - - /* Skip whole thing for a pool which isn't in /dev - * so we don't mess filesystem/dir based pools - */ - if (!STRPREFIX(pool->def->target.path, "/dev")) - goto ret_strdup; - /* Logical pools are under /dev but already have stable paths */ - if (pool->def->type == VIR_STORAGE_POOL_LOGICAL) + if (pool->def->type == VIR_STORAGE_POOL_LOGICAL || + !virStorageBackendPoolPathIsStable(pool->def->target.path)) goto ret_strdup; /* We loop here because /dev/disk/by-{id,path} may not have existed diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h index bb1e8d8..85a8a4b 100644 --- a/src/storage/storage_backend.h +++ b/src/storage/storage_backend.h @@ -187,6 +187,7 @@ int virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target, int fd, struct stat *sb); +bool virStorageBackendPoolPathIsStable(const char *path); char *virStorageBackendStablePath(virStoragePoolObjPtr pool, const char *devpath, bool loop); -- 2.1.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list