mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
util: storage: Add function to transfer config parts to new chain element
We are going to modify storage source chains in place. Add a helper that will copy relevant information such as security labels to the new element if that doesn't contain it.
This commit is contained in:
parent
45feb5d37f
commit
3bd69ab940
@ -1925,6 +1925,7 @@ virStorageSourceCopy;
|
|||||||
virStorageSourceFree;
|
virStorageSourceFree;
|
||||||
virStorageSourceGetActualType;
|
virStorageSourceGetActualType;
|
||||||
virStorageSourceGetSecurityLabelDef;
|
virStorageSourceGetSecurityLabelDef;
|
||||||
|
virStorageSourceInitChainElement;
|
||||||
virStorageSourceIsLocalStorage;
|
virStorageSourceIsLocalStorage;
|
||||||
virStorageSourceNewFromBacking;
|
virStorageSourceNewFromBacking;
|
||||||
virStorageSourcePoolDefFree;
|
virStorageSourcePoolDefFree;
|
||||||
|
@ -1885,6 +1885,46 @@ virStorageSourceCopy(const virStorageSource *src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virStorageSourceInitChainElement:
|
||||||
|
* @newelem: New backing chain element disk source
|
||||||
|
* @old: Existing top level disk source
|
||||||
|
* @force: Force-copy the information
|
||||||
|
*
|
||||||
|
* Transfers relevant information from the existing disk source to the new
|
||||||
|
* backing chain element if they weren't supplied so that labelling info
|
||||||
|
* and possibly other stuff is correct.
|
||||||
|
*
|
||||||
|
* If @force is true, user-supplied information for the new backing store
|
||||||
|
* element is overwritten from @old instead of keeping it.
|
||||||
|
*
|
||||||
|
* Returns 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virStorageSourceInitChainElement(virStorageSourcePtr newelem,
|
||||||
|
virStorageSourcePtr old,
|
||||||
|
bool force)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (force) {
|
||||||
|
virStorageSourceSeclabelsClear(newelem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!newelem->seclabels &&
|
||||||
|
virStorageSourceSeclabelsCopy(newelem, old) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
newelem->shared = old->shared;
|
||||||
|
newelem->readonly = old->readonly;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def)
|
virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def)
|
||||||
{
|
{
|
||||||
|
@ -345,6 +345,9 @@ void virStorageNetHostDefFree(size_t nhosts, virStorageNetHostDefPtr hosts);
|
|||||||
virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts,
|
virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts,
|
||||||
virStorageNetHostDefPtr hosts);
|
virStorageNetHostDefPtr hosts);
|
||||||
|
|
||||||
|
int virStorageSourceInitChainElement(virStorageSourcePtr newelem,
|
||||||
|
virStorageSourcePtr old,
|
||||||
|
bool force);
|
||||||
void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
|
void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
|
||||||
void virStorageSourceClear(virStorageSourcePtr def);
|
void virStorageSourceClear(virStorageSourcePtr def);
|
||||||
int virStorageSourceGetActualType(virStorageSourcePtr def);
|
int virStorageSourceGetActualType(virStorageSourcePtr def);
|
||||||
|
Loading…
Reference in New Issue
Block a user