mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 01:45:17 +00:00
Implement public API for virDomainGetFSInfo
virDomainGetFSInfo returns a list of filesystems information mounted in the guest, which contains mountpoints, device names, filesystem types, and device aliases named by libvirt. This will be useful, for example, to specify mountpoints to fsfreeze when taking snapshot of a part of disks. Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
This commit is contained in:
parent
b29f2436ac
commit
612e037b4c
@ -3497,6 +3497,28 @@ int virDomainFSThaw(virDomainPtr dom,
|
||||
unsigned int nmountpoints,
|
||||
unsigned int flags);
|
||||
|
||||
/**
|
||||
* virDomainFSInfo:
|
||||
*
|
||||
* The data structure containing mounted file systems within a guset
|
||||
*
|
||||
*/
|
||||
typedef struct _virDomainFSInfo virDomainFSInfo;
|
||||
typedef virDomainFSInfo *virDomainFSInfoPtr;
|
||||
struct _virDomainFSInfo {
|
||||
char *mountpoint; /* path to mount point */
|
||||
char *name; /* device name in the guest (e.g. "sda1") */
|
||||
char *fstype; /* filesystem type */
|
||||
size_t ndevAlias; /* number of elements in devAlias */
|
||||
char **devAlias; /* array of disk device aliases */
|
||||
};
|
||||
|
||||
void virDomainFSInfoFree(virDomainFSInfoPtr info);
|
||||
|
||||
int virDomainGetFSInfo(virDomainPtr dom,
|
||||
virDomainFSInfoPtr **info,
|
||||
unsigned int flags);
|
||||
|
||||
int virDomainGetTime(virDomainPtr dom,
|
||||
long long *seconds,
|
||||
unsigned int *nseconds,
|
||||
|
@ -1138,6 +1138,11 @@ typedef int
|
||||
unsigned int nmountpoints,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int
|
||||
(*virDrvDomainGetFSInfo)(virDomainPtr dom,
|
||||
virDomainFSInfoPtr **info,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int
|
||||
(*virDrvNodeGetFreePages)(virConnectPtr conn,
|
||||
unsigned int npages,
|
||||
@ -1390,6 +1395,7 @@ struct _virHypervisorDriver {
|
||||
virDrvConnectGetDomainCapabilities connectGetDomainCapabilities;
|
||||
virDrvConnectGetAllDomainStats connectGetAllDomainStats;
|
||||
virDrvNodeAllocPages nodeAllocPages;
|
||||
virDrvDomainGetFSInfo domainGetFSInfo;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1400,6 +1400,74 @@ virConnectOpenAuth(const char *name,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virDomainGetFSInfo:
|
||||
* @dom: a domain object
|
||||
* @info: a pointer to a variable to store an array of mount points information
|
||||
* @flags: extra flags; not used yet, so callers should always pass 0
|
||||
*
|
||||
* Get a list of mapping information for each mounted file systems within the
|
||||
* specified guest and the disks.
|
||||
*
|
||||
* Returns the number of returned mount points, or -1 in case of error.
|
||||
* On success, the array of the information is stored into @info. The caller is
|
||||
* responsible for calling virDomainFSInfoFree() on each array element, then
|
||||
* calling free() on @info. On error, @info is set to NULL.
|
||||
*/
|
||||
int
|
||||
virDomainGetFSInfo(virDomainPtr dom,
|
||||
virDomainFSInfoPtr **info,
|
||||
unsigned int flags)
|
||||
{
|
||||
VIR_DOMAIN_DEBUG(dom, "info=%p, flags=%x", info, flags);
|
||||
|
||||
virResetLastError();
|
||||
|
||||
virCheckDomainReturn(dom, -1);
|
||||
virCheckReadOnlyGoto(dom->conn->flags, error);
|
||||
virCheckNonNullArgGoto(info, error);
|
||||
*info = NULL;
|
||||
|
||||
if (dom->conn->driver->domainGetFSInfo) {
|
||||
int ret = dom->conn->driver->domainGetFSInfo(dom, info, flags);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
return ret;
|
||||
}
|
||||
|
||||
virReportUnsupportedError();
|
||||
|
||||
error:
|
||||
virDispatchError(dom->conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virDomainFSInfoFree:
|
||||
* @info: pointer to a FSInfo object
|
||||
*
|
||||
* Frees all the memory occupied by @info.
|
||||
*/
|
||||
void
|
||||
virDomainFSInfoFree(virDomainFSInfoPtr info)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
VIR_FREE(info->mountpoint);
|
||||
VIR_FREE(info->name);
|
||||
VIR_FREE(info->fstype);
|
||||
|
||||
for (i = 0; i < info->ndevAlias; i++)
|
||||
VIR_FREE(info->devAlias[i]);
|
||||
VIR_FREE(info->devAlias);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* virConnectClose:
|
||||
* @conn: pointer to the hypervisor connection
|
||||
|
@ -684,4 +684,10 @@ LIBVIRT_1.2.9 {
|
||||
virNodeAllocPages;
|
||||
} LIBVIRT_1.2.8;
|
||||
|
||||
LIBVIRT_1.2.11 {
|
||||
global:
|
||||
virDomainFSInfoFree;
|
||||
virDomainGetFSInfo;
|
||||
} LIBVIRT_1.2.9;
|
||||
|
||||
# .... define new API here using predicted next version number ....
|
||||
|
Loading…
x
Reference in New Issue
Block a user