提交 0fbf3704 编写于 作者: M Michal Privoznik

Introduce virDomainFSTrim() public API

This will call FITRIM within guest. The API has 4 arguments,
however, only 2 will be used for now (@dom and @minumum).
The rest two are there if in future qemu guest agent learns them.
上级 856a4822
...@@ -4457,6 +4457,10 @@ int virDomainOpenGraphics(virDomainPtr dom, ...@@ -4457,6 +4457,10 @@ int virDomainOpenGraphics(virDomainPtr dom,
int virDomainInjectNMI(virDomainPtr domain, unsigned int flags); int virDomainInjectNMI(virDomainPtr domain, unsigned int flags);
int virDomainFSTrim(virDomainPtr dom,
const char *mountPoint,
unsigned long long minimum,
unsigned int flags);
/** /**
* virSchedParameterType: * virSchedParameterType:
......
...@@ -903,6 +903,11 @@ typedef int ...@@ -903,6 +903,11 @@ typedef int
unsigned char **cpumap, unsigned char **cpumap,
unsigned int *online, unsigned int *online,
unsigned int flags); unsigned int flags);
typedef int
(*virDrvDomainFSTrim)(virDomainPtr dom,
const char *mountPoint,
unsigned long long minimum,
unsigned int flags);
/** /**
* _virDriver: * _virDriver:
...@@ -1094,6 +1099,7 @@ struct _virDriver { ...@@ -1094,6 +1099,7 @@ struct _virDriver {
virDrvNodeGetMemoryParameters nodeGetMemoryParameters; virDrvNodeGetMemoryParameters nodeGetMemoryParameters;
virDrvNodeSetMemoryParameters nodeSetMemoryParameters; virDrvNodeSetMemoryParameters nodeSetMemoryParameters;
virDrvNodeGetCPUMap nodeGetCPUMap; virDrvNodeGetCPUMap nodeGetCPUMap;
virDrvDomainFSTrim domainFSTrim;
}; };
typedef int typedef int
......
...@@ -20224,3 +20224,58 @@ error: ...@@ -20224,3 +20224,58 @@ error:
virDispatchError(conn); virDispatchError(conn);
return -1; return -1;
} }
/**
* virDomainFSTrim:
* @dom: a domain object
* @mountPoint: which mount point trim
* @minimum: Minimum contiguous free range to discard in bytes
* @flags: extra flags, not used yet, so callers should always pass 0
*
* Calls FITRIM within the guest (hence guest agent may be
* required depending on hypervisor used). Either call it on each
* mounted filesystem (@mountPoint is NULL) or just on specified
* @mountPoint. @minimum tell that free ranges smaller than this
* may be ignored (this is a hint and the guest may not respect
* it). By increasing this value, the fstrim operation will
* complete more quickly for filesystems with badly fragmented
* free space, although not all blocks will be discarded.
*
* Returns 0 on success, -1 otherwise.
*/
int
virDomainFSTrim(virDomainPtr dom,
const char *mountPoint,
unsigned long long minimum,
unsigned int flags)
{
VIR_DOMAIN_DEBUG(dom, "mountPoint=%s, minimum=%llu, flags=%x",
mountPoint, minimum, flags);
virResetLastError();
if (!VIR_IS_DOMAIN(dom)) {
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
if (dom->conn->flags & VIR_CONNECT_RO) {
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
goto error;
}
if (dom->conn->driver->domainFSTrim) {
int ret = dom->conn->driver->domainFSTrim(dom, mountPoint,
minimum, flags);
if (ret < 0)
goto error;
return ret;
}
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
error:
virDispatchError(dom->conn);
return -1;
}
...@@ -574,4 +574,9 @@ LIBVIRT_1.0.0 { ...@@ -574,4 +574,9 @@ LIBVIRT_1.0.0 {
virNodeGetCPUMap; virNodeGetCPUMap;
} LIBVIRT_0.10.2; } LIBVIRT_0.10.2;
LIBVIRT_1.0.1 {
global:
virDomainFSTrim;
} LIBVIRT_1.0.0;
# .... define new API here using predicted next version number .... # .... define new API here using predicted next version number ....
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册