diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 4486b758e5..91fdc95e66 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1718,6 +1718,13 @@ virStorageSourceClear(virStorageSourcePtr def) virStorageNetHostDefFree(def->nhosts, def->hosts); virStorageSourceAuthClear(def); + + VIR_FREE(def->relPath); + VIR_FREE(def->relDir); + VIR_FREE(def->backingStoreRaw); + + /* recursively free backing chain */ + virStorageSourceFree(def->backingMeta); } diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 0e5136e8a1..11e25eb496 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -271,8 +271,22 @@ struct _virStorageSource { size_t nseclabels; virSecurityDeviceLabelDefPtr *seclabels; + /* backing chain of the storage source */ + virStorageSourcePtr backingMeta; + /* metadata for storage driver access to remote and local volumes */ virStorageDriverDataPtr drv; + + /* metadata about storage image which need separate fields */ + /* Name of the current file as spelled by the user (top level) or + * metadata of the overlay (if this is a backing store). */ + char *relPath; + /* Directory to start from if backingStoreRaw is a relative file + * name. */ + char *relDir; + /* Name of the child backing store recorded in metadata of the + * current file. */ + char *backingStoreRaw; };