On 07/28/2011 05:50 PM, Wen Congyang wrote:
At 07/28/2011 05:52 PM, Alex Jia Write:
> * tools/virsh.c: avoid missing zero value judgement in cmdBlkiotune, when
> weight is equal to 0, the cmdBlkiotune will not raise any error information
> when judge weight value first time, and execute else branch to judge weight
> value again, strncpy(temp->field, VIR_DOMAIN_BLKIO_WEIGHT,
sizeof(temp->field))
> will be not executed for ever. However, if and only if param->field is equal
> to VIR_DOMAIN_BLKIO_WEIGHT, underlying qemuDomainSetBlkioParameters function
> will check whether weight value is in range [100, 1000].
>
> * how to reproduce?
>
> % virsh blkiotune ${guestname} --weight 0
>
> Signed-off-by: Alex Jia<ajia(a)redhat.com>
> ---
> tools/virsh.c | 6 +++---
> 1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 8bd22dc..f24050d 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -4037,12 +4037,12 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd)
> goto cleanup;
> }
>
> - if (weight) {
> - nparams++;
> - if (weight< 0) {
> + if (vshCommandOptInt(cmd, "weight",&weight)> 0) {
Why you call vshCommandOptInt(cmd, "weight",&weight) again?
Make sure
weight indeed exists and then checking whether its value is right.
if do it like this:
if (weight<= 0) {
vshError(ctl, _("Invalid value of %d for I/O weight"), weight);
goto cleanup;
}
nparams++;
......
when I run virsh blkiotune ${guestname} --weight 0, I will not hit this error,
and when I get weight value by virsh blkiotune ${guestname}, this error will be
hit, because vshCommandOptInt(cmd, "weight",&weight) will return 0 and
unchange
weight value, it means weight will keep initial 0 value, hence vshError will be
raise.
Thanks,
Alex
> + if (weight<= 0) {
> vshError(ctl, _("Invalid value of %d for I/O weight"),
weight);
> goto cleanup;
> }
> + nparams++;
> }
>
> if (nparams == 0) {