On Mon, Nov 18, 2024 at 19:24:25 +0530, Harikumar R wrote:
> From: Chun Feng Wu <[email protected]>
>
> Update "attach_disk" to support new option: throttle-groups to
> form filter chain in QEMU for specific disk
>
> Signed-off-by: Chun Feng Wu <[email protected]>
> ---
> docs/manpages/virsh.rst | 3 ++-
> tools/virsh-completer-domain.c | 27 +++++++++++++++++++++++++++
> tools/virsh-completer-domain.h | 5 +++++
> tools/virsh-domain.c | 25 ++++++++++++++++++++++++-
> 4 files changed, 58 insertions(+), 2 deletions(-)
[...]
> @@ -611,6 +616,8 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
> const char *host_name = NULL;
> const char *host_transport = NULL;
> const char *host_socket = NULL;
> + const char *throttle_groups_str = NULL;
> + g_autofree char **throttle_groups = NULL;
This is filled by g_strsplit, so this would leak the individual strings.
You need to use g_auto(GStrv) to declare this.
> int ret;
> unsigned int flags = VIR_DOMAIN_AFFECT_CURRENT;
> const char *stype = NULL;
> @@ -622,6 +629,7 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
> g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
> g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(&diskChildBuf);
> g_auto(virBuffer) hostAttrBuf = VIR_BUFFER_INITIALIZER;
> + g_auto(virBuffer) throttleChildBuf = VIR_BUFFER_INITIALIZER;
Declare this inside the block using it.
> g_autofree char *xml = NULL;
> struct stat st;
> bool current = vshCommandOptBool(cmd, "current");
> @@ -665,9 +673,14 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
> vshCommandOptString(ctl, cmd, "source-protocol", &source_protocol) <
> 0 ||
> vshCommandOptString(ctl, cmd, "source-host-name", &host_name) < 0 ||
> vshCommandOptString(ctl, cmd, "source-host-transport",
> &host_transport) < 0 ||
> - vshCommandOptString(ctl, cmd, "source-host-socket", &host_socket) <
> 0)
> + vshCommandOptString(ctl, cmd, "source-host-socket", &host_socket) <
> 0 ||
> + vshCommandOptString(ctl, cmd, "throttle-groups",
> &throttle_groups_str) < 0)
> return false;
>
> + if (throttle_groups_str) {
> + throttle_groups = g_strsplit(throttle_groups_str, ",", 0);
> + }
> +
> if (stype &&
> (type = virshAttachDiskSourceTypeFromString(stype)) < 0) {
> vshError(ctl, _("Unknown source type: '%1$s'"), stype);
> @@ -714,6 +727,16 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
>
> virXMLFormatElement(&diskChildBuf, "driver", &driverAttrBuf, NULL);
>
> + if (throttle_groups) {
> + char **iter;
> + for (iter = throttle_groups; *iter != NULL; iter++) {
> + g_auto(virBuffer) throttleAttrBuf = VIR_BUFFER_INITIALIZER;
> + virBufferAsprintf(&throttleAttrBuf, " group='%s'", *iter);
> + virXMLFormatElement(&throttleChildBuf, "throttlefilter",
> &throttleAttrBuf, NULL);
> + }
> + virXMLFormatElement(&diskChildBuf, "throttlefilters", NULL,
> &throttleChildBuf);
> + }
> +
With the bug fixed:
Reviewed-by: Peter Krempa <[email protected]>