On 11/10/2011 03:04 PM, Eric Blake wrote:
We still need a v4 respinning this to use virTypedParameter; I can help
by posting a patch 1/8 that shows the changes that I think we need in
the public interface, but I don't want to spend the time rebasing the
entire series.
This is more along the lines of what I'm looking for in patch 1/8 (as a
diff against your v3 attempt at 1/8). Obviously, it doesn't compile as
is, so much as focus on the public interface aspect:
diff --git i/include/libvirt/libvirt.h.in w/include/libvirt/libvirt.h.in
index 4b05869..52ae0ab 100644
--- i/include/libvirt/libvirt.h.in
+++ w/include/libvirt/libvirt.h.in
@@ -1684,26 +1684,27 @@ int virDomainBlockPull(virDomainPtr
dom, const char *path,
* Block I/O throttling support
*/
-typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo;
-struct _virDomainBlockIoTuneInfo {
- unsigned long long total_bytes_sec;
- unsigned long long read_bytes_sec;
- unsigned long long write_bytes_sec;
- unsigned long long total_iops_sec;
- unsigned long long read_iops_sec;
- unsigned long long write_iops_sec;
-};
-typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr;
+/**
+ * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC:
+ *
+ * Macro for the BlockIoTune tunable weight: it represents the total
+ * bytes per second permitted through a block device, as a ullong.
+ */
+#define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC "total_bytes_sec"
+
+/* ... and so forth - 6 macros total */
int
virDomainSetBlockIoTune(virDomainPtr dom,
const char *disk,
- virDomainBlockIoTuneInfoPtr info,
+ virTypedParameterPtr params,
+ int nparams,
unsigned int flags);
int
virDomainGetBlockIoTune(virDomainPtr dom,
const char *disk,
- virDomainBlockIoTuneInfoPtr reply,
+ virTypedParameterPtr params,
+ int *nparams,
unsigned int flags);
diff --git i/src/libvirt.c w/src/libvirt.c
index cd5931f..287dfc5 100644
--- i/src/libvirt.c
+++ w/src/libvirt.c
@@ -17184,17 +17184,23 @@ error:
* virDomainSetBlockIoTune:
* @dom: pointer to domain object
* @disk: Fully-qualified disk name
- * @info: Specify block I/O limits in bytes
+ * @params: pointer to blkio parameter objects
+ * @nparams: number of blkio parameters (this value can be the same or
+ * less than the number of parameters supported)
* @flags: An OR'ed set of virDomainModificationImpact
*
- * This function is mainly to enable Block I/O throttling function in
libvirt.
- * It is used to change the block I/O throttling setting for specified
domain.
+ * Change all or a subset of the per-device block IO tunables.
*
- * Returns 0 if the operation has started, -1 on failure.
+ * The @disk parameter is the name of the block device. Get this
+ * by calling virDomainGetXMLDesc and finding the <target dev='...'>
+ * attribute within //domain/devices/disk. (For example, "xvda").
+ *
+ * Returns -1 in case of error, 0 in case of success.
*/
int virDomainSetBlockIoTune(virDomainPtr dom,
const char *disk,
- virDomainBlockIoTuneInfoPtr info,
+ virTypedParameterPtr params,
+ int nparams,
unsigned int flags)
{
virConnectPtr conn;
@@ -17245,18 +17251,35 @@ error:
* virDomainGetBlockIoTune:
* @dom: pointer to domain object
* @disk: Fully-qualified disk name
- * @reply: Specify block I/O info in bytes
+ * @params: pointer to blkio parameter object
+ * (return value, allocated by the caller)
+ * @nparams: pointer to number of blkio parameters; input and output
* @flags: An OR'ed set of virDomainModificationImpact
*
- * This function is mainly to enable Block I/O throttling function in
libvirt.
- * It is used to get the block I/O throttling setting for specified domain.
+ * Get all block IO tunable parameters for a given device. On input,
+ * @nparams gives the size of the @params array; on output, @nparams
+ * gives how many slots were filled with parameter information, which
+ * might be less but will not exceed the input value.
*
- * Returns 0 if the operation has started, -1 on failure.
+ * As a special case, calling with @params as NULL and @nparams as 0 on
+ * input will cause @nparams on output to contain the number of parameters
+ * supported by the hypervisor. The caller should then allocate @params
+ * array, i.e. (sizeof(@virTypedParameter) * @nparams) bytes and call
the API
+ * again.
+ *
+ * See virDomainGetMemoryParameters() for an equivalent usage example.
+ *
+ * The @disk parameter is the name of the block device. Get this
+ * by calling virDomainGetXMLDesc and finding the <target dev='...'>
+ * attribute within //domain/devices/disk. (For example, "xvda").
+ *
+ * Returns -1 in case of error, 0 in case of success.
*/
int virDomainGetBlockIoTune(virDomainPtr dom,
const char *disk,
- virDomainBlockIoTuneInfoPtr reply,
+ virTypedParameterPtr params,
+ int *nparams,
unsigned int flags)
{
virConnectPtr conn;
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org