From: Bin Guo <[email protected]>

On Wed, 18 Jun 2026, Peter Xu wrote:
> If io_readv() reads partial, IIUC returning how much it reads is the
> correct behavior. You can refer to qio_channel_socket_readv().

You're right.  I misread the QIOChannel contract.  readv() should
return whatever is available, not loop until the full request is
satisfied.  The socket implementation confirms that.

> RDMA doesn't respect blocking is because it _always_ blocks. That is,
> qemu_rdma_exchange_recv() always will block even if blocking=false.

Yes, that's the real issue.  My v2 patch only changed the blocking
path and left qemu_rdma_exchange_recv() blocking unconditionally in
non-blocking mode, which is wrong and can break coroutine use cases.

I'll drop [PATCH 1/2].  The blocking/non-blocking handling in RDMA
needs a more fundamental rework than this series attempted.

> Also, I'd like Zhijian to take another look, and cc Dan too.

Understood.

For [PATCH 2/2] "migration/rdma: account transferred bytes for zero
page compression", it is an independent fix for RDMA migration
accounting and unrelated to the blocking-mode discussion.  I'd like
to keep that one separate and submit it on its own if there are no
further comments.

Thanks,
Bin Guo

Reply via email to