Currently, if a sheepdog server exits, all the connecting VMs need to be restarted. This series implements a feature to reconnect the server, and enables us to do online sheepdog upgrade and avoid restarting VMs when sheepdog servers crash unexpectedly.
v5: - Use AioContext timer for co_aio_sleep_ns(). v4: - Added comment to explain why we need a failed queue. - Fixed a return value of sd_acb_cancelable(). v3: - Check return values of qemu_co_recv/send more strictly. - Move inflight requests to the failed list after reconnection completes. This is necessary to resend I/Os while connection is lost. - Check simultaneous create in resend_aioreq(). v2: - Dropped nonblocking connect patches. MORITA Kazutaka (8): sheepdog: check return values of qemu_co_recv/send correctly sheepdog: handle vdi objects in resend_aio_req sheepdog: reload inode outside of resend_aioreq coroutine: add co_aio_sleep_ns() to allow sleep in block drivers sheepdog: try to reconnect to sheepdog after network error sheepdog: make add_aio_request and send_aioreq void functions sheepdog: cancel aio requests if possible sheepdog: check simultaneous create in resend_aioreq block/sheepdog.c | 322 ++++++++++++++++++++++++++++----------------- include/block/coroutine.h | 9 ++ qemu-coroutine-sleep.c | 14 ++ 3 files changed, 226 insertions(+), 119 deletions(-) -- 1.7.10.4