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 <jfer...@redhat.com> --- src/storage/storage_backend.c | 42 +++++++++++++++++++++++++++++------------- src/storage/storage_backend.h | 1 + 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index 9322571..77c3be3 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -1675,6 +1675,25 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target, return 0; } +/* + * Check how the storage pool target path is set. + * + * Returns false if: + * 1. No target path set + * 2. Target path is /dev or /dev/ + * 3. Target path does not start with /dev + */ +bool +virStorageBackendPoolUseDevPath(virStoragePoolObjPtr pool) +{ + if (pool->def->target.path == NULL || + STREQ(pool->def->target.path, "/dev") || + STREQ(pool->def->target.path, "/dev/") || + !STRPREFIX(pool->def->target.path, "/dev")) + return false; + + return true; +} /* * Given a volume path directly in /dev/XXX, iterate over the @@ -1704,20 +1723,17 @@ 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 this is a logical pool, then just strdup the passed devpath + * and return. Logical pools are under /dev but already have stable + * paths, so they don't need to search under the pool target path. + * + * For the SCSI/iSCSI pools, if the pool target path isn't under + * /dev, then just strdup the passed devpath and return 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 || + !virStorageBackendPoolUseDevPath(pool)) 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 fd2451c..1d5cfc2 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 virStorageBackendPoolUseDevPath(virStoragePoolObjPtr pool); char *virStorageBackendStablePath(virStoragePoolObjPtr pool, const char *devpath, bool loop); -- 2.1.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list