mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00: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;
|
||||
virStorageSourceGetActualType;
|
||||
virStorageSourceGetSecurityLabelDef;
|
||||
virStorageSourceInitChainElement;
|
||||
virStorageSourceIsLocalStorage;
|
||||
virStorageSourceNewFromBacking;
|
||||
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
|
||||
virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def)
|
||||
{
|
||||
|
@ -345,6 +345,9 @@ void virStorageNetHostDefFree(size_t nhosts, virStorageNetHostDefPtr hosts);
|
||||
virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts,
|
||||
virStorageNetHostDefPtr hosts);
|
||||
|
||||
int virStorageSourceInitChainElement(virStorageSourcePtr newelem,
|
||||
virStorageSourcePtr old,
|
||||
bool force);
|
||||
void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
|
||||
void virStorageSourceClear(virStorageSourcePtr def);
|
||||
int virStorageSourceGetActualType(virStorageSourcePtr def);
|
||||
|
Loading…
Reference in New Issue
Block a user