Il 11/09/2013 11:17, Juan Quintela ha scritto:
> Lei Li <li...@linux.vnet.ibm.com> wrote:
>> qemu_file_rate_limit() never return negative value since the refactor
>> by Commit 1964a39, this patch gets rid of the negative check for it,
>> adjust bytes_transferred and return value correspondingly in 
>> ram_save_iterate().
>>
>> Signed-off-by: Lei Li <li...@linux.vnet.ibm.com>
>> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
>> ---
>>
>> Change since v1:
>>   Return fixes and improvement from Paolo Bonzini.
>>   
>>  arch_init.c |   15 ++++++++++-----
>>  1 files changed, 10 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch_init.c b/arch_init.c
>> index 94d45e1..a26bc89 100644
>> --- a/arch_init.c
>> +++ b/arch_init.c
>> @@ -709,15 +709,20 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
>>       */
>>      ram_control_after_iterate(f, RAM_CONTROL_ROUND);
>>  
>> +    bytes_transferred += total_sent;
> 
> Agreed.
> 
>> +
>> +    /*
>> +     * Do not count these 8 bytes into total_sent, so that we can
>> +     * return 0 if no page had been dirtied.
>> +     */
>> +    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
>> +    bytes_transferred += 8;
>> +
>> +    ret = qemu_file_get_error(f);
>>      if (ret < 0) {
> 
> Not sure this is the right solution.
> 
> We are sending anyways RAM_SAVE_FLAG_EOS.

If there is an error, the qemu_put_be64 will do nothing.  It is part of
the design of QEMUFile that you can keep sending stuff to it after an
error happened.

> And I think that the right solution is make qemu_get_rate_limit() to
> return -1 in case of error (or the error, I don't care).

You might do both things, it would avoid the useless g_usleep you
pointed out below.  But Lei's patch is good, because an error could
happen exactly during the qemu_put_be64 that writes RAM_SAVE_FLAG_EOS.

> savevm.c: qemu_savevm_state_iterate()
> 
>         if (qemu_file_rate_limit(f)) {
>             return 0;
>         }
> 
> check is incorrect again, we should return an error if there is one
> error.

Nothing cares if qemu_savevm_state_iterate returns 0 or negative, so
changing qemu_savevm_state_iterate to only return 0/1 would make sense too.

Paolo


> 
> I think that returning qemu_rate_limit() to return 0/1/negative makes sense.
> 
> Thoughts?
> 
> Thanks, Juan.
> 


Reply via email to