mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
storage: Add helper to retrieve the backing store string of a storage volume
It is necessary for some parts of the code to refresh just data based on the based on the backing store string. Add a convenience function that will retrieve this data.
This commit is contained in:
parent
e4c3eff70e
commit
d97cfdc891
@ -3263,6 +3263,50 @@ virStorageFileGetMetadata(virStorageSourcePtr src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virStorageFileGetBackingStoreStr:
|
||||||
|
* @src: storage object
|
||||||
|
*
|
||||||
|
* Extracts the backing store string as stored in the storage volume described
|
||||||
|
* by @src and returns it to the user. Caller is responsible for freeing it.
|
||||||
|
* In case when the string can't be retrieved or does not exist NULL is
|
||||||
|
* returned.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
||||||
|
{
|
||||||
|
virStorageSourcePtr tmp = NULL;
|
||||||
|
char *buf = NULL;
|
||||||
|
ssize_t headerLen;
|
||||||
|
char *ret = NULL;
|
||||||
|
|
||||||
|
/* exit if we can't load information about the current image */
|
||||||
|
if (!virStorageFileSupportsBackingChainTraversal(src))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (virStorageFileAccess(src, F_OK) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((headerLen = virStorageFileReadHeader(src, VIR_STORAGE_MAX_HEADER,
|
||||||
|
&buf)) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!(tmp = virStorageSourceCopy(src, false)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virStorageFileGetMetadataInternal(tmp, buf, headerLen, NULL) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
VIR_STEAL_PTR(ret, tmp->backingStoreRaw);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FREE(buf);
|
||||||
|
virStorageSourceFree(tmp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
|
virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
|
||||||
virStoragePoolDefPtr pooldef)
|
virStoragePoolDefPtr pooldef)
|
||||||
|
@ -54,6 +54,9 @@ int virStorageFileGetMetadata(virStorageSourcePtr src,
|
|||||||
bool report_broken)
|
bool report_broken)
|
||||||
ATTRIBUTE_NONNULL(1);
|
ATTRIBUTE_NONNULL(1);
|
||||||
|
|
||||||
|
char *virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
||||||
|
ATTRIBUTE_NONNULL(1);
|
||||||
|
|
||||||
int virStorageTranslateDiskSourcePool(virConnectPtr conn,
|
int virStorageTranslateDiskSourcePool(virConnectPtr conn,
|
||||||
virDomainDiskDefPtr def);
|
virDomainDiskDefPtr def);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user