[libvirt] [PATCH v2] virsh: avoid missing zero value judgement in cmdBlkiotune
Alex Jia
ajia at redhat.com
Thu Jul 28 09:32:07 UTC 2011
On 07/28/2011 05:16 PM, Michal Privoznik wrote:
> On 28.07.2011 11:04, Alex Jia wrote:
>> * 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 at redhat.com>
>> ---
>> tools/virsh.c | 11 +++++------
>> 1 files changed, 5 insertions(+), 6 deletions(-)
>>
>
> I liked the first verion more than this. Although it is not shown in
> this snippet,
> nparams is initialized to zero
>
>> diff --git a/tools/virsh.c b/tools/virsh.c
>> index 8bd22dc..512f2c6 100644
>> --- a/tools/virsh.c
>> +++ b/tools/virsh.c
>> @@ -4037,14 +4037,13 @@ cmdBlkiotune(vshControl * ctl, const vshCmd *
>> cmd)
>> goto cleanup;
>> }
>>
>> - if (weight) {
>> - nparams++;
>> - if (weight< 0) {
>> - vshError(ctl, _("Invalid value of %d for I/O weight"),
>> weight);
>> - goto cleanup;
>> - }
>> + if (weight<= 0) {
>> + vshError(ctl, _("Invalid value of %d for I/O weight"), weight);
>> + goto cleanup;
>> }
>>
> and therefore doing this
>> + nparams++;
>> +
> will invalidate this test.
>> if (nparams == 0) {
>> /* get the number of blkio parameters */
>> if (virDomainGetBlkioParameters(dom, NULL,&nparams, flags)
>> != 0) {
>
> The better way of dealing with this issue IMO is to switch from
> if (weight) {
> to test if 'weight' parameter was given (vshCommandOptInt() returns
> >0) and after this
> check for impermissible values. And after the latter test (still
> inside 'weight argument
> given') increment nparams:
>
> if (weight_given) {
> if (weight<=0) {
> report error; goto cleanup;
> nparams++;
> }
>
>
> Michal
I aware of this , absolutely agree, thanks for your nice comment.
Regards,
Alex
More information about the libvir-list
mailing list