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(a)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