> > But when I use a thread it triggers the bug in bdrv_drain_all(). So
> > how can I fix  bdrv_drain_all() if I use a separate thread to write data?
> 
> The bug is, in all likelihood, in your own code.  Sorry. :)

yes. I still not fully understand that aio code.

If I detect a incomplete write, I register an aio handler like this:

        ret = write(fd, buf, count) 
         if (ret < 0 && (errno == EAGAIN || errno == EWOULDBLOCK) ) {
              ...
              qemu_aio_set_fd_handler(fd, NULL, vma_co_continue_write,  NULL, 
mydata);
              qemu_coroutine_yield();

But seems that qemu_aio_wait() returns false after that.

I thought that should return true instead?

Reply via email to