From 97148962b5bc51d780997d66dfc024a3aad13892 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 23 Feb 2017 13:27:18 +0100 Subject: [PATCH] virsh: Implement 'domblkthreshold' command to call virDomainSetBlockThreshold Add a simple wrapper which will allow to set the threshold for delivering the event. --- tools/virsh-domain.c | 64 ++++++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 8 ++++++ 2 files changed, 72 insertions(+) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index d1d17c4520..2269146850 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -7096,6 +7096,64 @@ cmdSetvcpu(vshControl *ctl, const vshCmd *cmd) } +/* + * "domblkthreshold" command + */ +static const vshCmdInfo info_domblkthreshold[] = { + {.name = "help", + .data = N_("set the threshold for block-threshold event for a given block " + "device or it's backing chain element") + }, + {.name = "desc", + .data = N_("set threshold for block-threshold event for a block device") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_domblkthreshold[] = { + VIRSH_COMMON_OPT_DOMAIN_FULL, + {.name = "dev", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("device to set threshold for") + }, + {.name = "threshold", + .type = VSH_OT_INT, + .flags = VSH_OFLAG_REQ, + .help = N_("threshold as a scaled number (by default bytes)") + }, + {.name = NULL} +}; + +static bool +cmdDomblkthreshold(vshControl *ctl, const vshCmd *cmd) +{ + unsigned long long threshold; + const char *dev = NULL; + virDomainPtr dom; + bool ret = false; + + if (vshCommandOptStringReq(ctl, cmd, "dev", &dev)) + return false; + + if (vshCommandOptScaledInt(ctl, cmd, "threshold", + &threshold, 1, ULLONG_MAX) < 0) + return false; + + if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (virDomainSetBlockThreshold(dom, dev, threshold, 0) < 0) + goto cleanup; + + ret = true; + + cleanup: + virDomainFree(dom); + return ret; +} + + /* * "iothreadinfo" command */ @@ -14067,5 +14125,11 @@ const vshCmdDef domManagementCmds[] = { .info = info_setvcpu, .flags = 0 }, + {.name = "domblkthreshold", + .handler = cmdDomblkthreshold, + .opts = opts_domblkthreshold, + .info = info_domblkthreshold, + .flags = 0 + }, {.name = NULL} }; diff --git a/tools/virsh.pod b/tools/virsh.pod index ee79046113..48be192346 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1274,6 +1274,14 @@ I<--bytes> with a scaled value allows to use finer granularity. A scaled value used without I<--bytes> will be rounded down to MiB/s. Note that the I<--bytes> may be unsupported by the hypervisor. + +=item B I I I + +Set the threshold value for delivering the block-threshold event. I +specifies the disk device target or backing chain element of given device using +the 'target[1]' syntax. I is a scaled value of the offset. If the +block device should write beyond that offset the event will be delivered. + =item B I I I Resize a block device of domain while the domain is running, I