Hi all. Here is NBD reconnect. The feature realized inside nbd-client driver and works as follows:
There are two parameters: reconnect-attempts and reconnect-timeout. So, we will try to reconnect in case of initial connection failed or in case of connection lost. All current and new io operations will wait until we make reconnect-attempts tries to reconnect. After this, all requests will fail with EIO, but we will continue trying to reconnect. v3: 06: fix build error in function 'nbd_co_send_request': error: 'i' may be used uninitialized in this function v2 notes: Here is v2 of NBD reconnect, but it is very very different from v1, so, forget about v1. The series includes my "NBD reconnect: preliminary refactoring", with changes in 05: leave asserts (Eric). Vladimir Sementsov-Ogievskiy (11): block/nbd-client: split channel errors from export errors block/nbd: move connection code from block/nbd to block/nbd-client block/nbd-client: split connection from initialization block/nbd-client: fix nbd_reply_chunk_iter_receive block/nbd-client: don't check ioc block/nbd-client: move from quit to state block/nbd-client: rename read_reply_co to connection_co block/nbd-client: move connecting to connection_co block/nbd: add cmdline and qapi parameters for nbd reconnect block/nbd-client: nbd reconnect iotests: test nbd reconnect qapi/block-core.json | 12 +- block/nbd-client.h | 23 ++- block/nbd-client.c | 429 ++++++++++++++++++++++++++++++------------ block/nbd.c | 61 +++--- tests/qemu-iotests/220 | 68 +++++++ tests/qemu-iotests/220.out | 7 + tests/qemu-iotests/group | 1 + tests/qemu-iotests/iotests.py | 4 + 8 files changed, 445 insertions(+), 160 deletions(-) create mode 100755 tests/qemu-iotests/220 create mode 100644 tests/qemu-iotests/220.out -- 2.11.1