Before, the volume name was determined as the last token after any /
character. This does not work with zvols below the top level of the
pool: /dev/zvols/pool/images/vm1 is truncated to /dev/zvols/pool/vm1.
This patch removes the pool name only, so when using the pool "pool",
the volume path "images/vm1" is used.
---
src/storage/storage_backend_zfs.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/storage/storage_backend_zfs.c b/src/storage/storage_backend_zfs.c
index 2a5d74357d..397ea7f386 100644
--- a/src/storage/storage_backend_zfs.c
+++ b/src/storage/storage_backend_zfs.c
@@ -104,7 +104,7 @@ virStorageBackendZFSParseVol(virStoragePoolObj *pool,
virStorageVolDef *volume = NULL;
virStoragePoolDef *def = virStoragePoolObjGetDef(pool);
g_auto(GStrv) tokens = NULL;
- char *tmp;
+ char *pool_name = def->source.name;
if (!(tokens = g_strsplit(volume_string, "\t", 0)))
return -1;
@@ -113,8 +113,9 @@ virStorageBackendZFSParseVol(virStoragePoolObj *pool,
goto cleanup;
vol_name = tokens[0];
- if ((tmp = strrchr(vol_name, '/')))
- vol_name = tmp + 1;
+ if (strlen(vol_name) > strlen(pool_name) &&
+ STRPREFIX(vol_name, pool_name))
+ vol_name += strlen(pool_name) + 1;
if (vol == NULL)
volume = virStorageVolDefFindByName(pool, vol_name);
--
2.36.1