mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-12 15:52:55 +00: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
|
||||
virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
|
||||
virStoragePoolDefPtr pooldef)
|
||||
|
@ -54,6 +54,9 @@ int virStorageFileGetMetadata(virStorageSourcePtr src,
|
||||
bool report_broken)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
char *virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
int virStorageTranslateDiskSourcePool(virConnectPtr conn,
|
||||
virDomainDiskDefPtr def);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user