> Say, In ram_save_iterate(), the current logic is:
> 
> ret = qemu_file_rate_limit();
> while(ret == 0) {
>      save RAM blocks until no more to send.
> }
> if (ret < 0) {
>      return ret;
> }
> ...
> 
> And in savevm layer, qemu_savevm_state_iterate() set an error if the return
> value of ram_save_iterate < 0.

But that is to report errors *not in the QEMUFile*.  Errors in the
QEMUFile are already reported by qemu_file_get_error(), and
qemu_savevm_state_iterate() will not overwrite them.

qemu_file_rate_limit() returning 1 is enough to exit the loop,
which is all that is needed.

> Obviously the return value of qemu_file_rate_limit() should have an negative
> value for there has been an error. Otherwise we need to modify the logic
> above.

It is not obvious to me... what is, again, the bug that you're observing?
I think it is happening only because you're modifying the migration thread's
body.  If you use the normal code of the migration thread, it will just work.

Paolo

Reply via email to