]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Add helper to look up disk soruce by the backing store string
authorPeter Krempa <pkrempa@redhat.com>
Thu, 23 Feb 2017 18:14:47 +0000 (19:14 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 27 Mar 2017 08:18:16 +0000 (10:18 +0200)
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 57b610c2215b8d7acba0ff46dfe223905aa053e1..20999cd3df68a152991a7a235379d23c1eb92781 100644 (file)
@@ -8580,3 +8580,40 @@ qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
 
     return ret;
 }
+
+
+virStorageSourcePtr
+qemuDomainGetStorageSourceByDevstr(const char *devstr,
+                                   virDomainDefPtr def)
+{
+    virDomainDiskDefPtr disk = NULL;
+    virStorageSourcePtr src = NULL;
+    char *target = NULL;
+    unsigned int idx;
+    size_t i;
+
+    if (virStorageFileParseBackingStoreStr(devstr, &target, &idx) < 0) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("failed to parse block device '%s'"), devstr);
+        return NULL;
+    }
+
+    for (i = 0; i < def->ndisks; i++) {
+        if (STREQ(target, def->disks[i]->dst)) {
+            disk = def->disks[i];
+            break;
+        }
+    }
+
+    if (!disk) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("failed to find disk '%s"), target);
+        goto cleanup;
+    }
+
+    src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL);
+
+ cleanup:
+    VIR_FREE(target);
+    return src;
+}
index 74d76a88cd3b109863d1851858e3d792ecd4373f..7a9cfad52cf750c58a525e565aeaf4ba08aef15c 100644 (file)
@@ -887,4 +887,7 @@ char *qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
                                         virStorageSourcePtr src,
                                         unsigned int idx);
 
+virStorageSourcePtr qemuDomainGetStorageSourceByDevstr(const char *devstr,
+                                                       virDomainDefPtr def);
+
 #endif /* __QEMU_DOMAIN_H__ */