Here is v2 of the nbd improvements series. It is based on Kevin's block branch, currently at 2168851.
Compared to v1, I reordered the patches in more logical blocks. Patches 1-4 touch sheepdog, patches 5-8 (including Stefan bdrv_flush patch, rebased) touch the generic block layer, patches 9-15 touch NBD. I also implemented multiple in-flight requests for the NBD client. The server is still serial, so there's not much benefit, but I checked that all code paths are hit. The changes are easy and actually cleanup the code compared to v1. However, it requires making discard asynchronous, because the client has to cope with getting other replies before the one for discard. This is patch 8. I didn't include the two patches already in the block branch. v1->v2: moved coroutine send/recv functions out of qemu-coroutine.c block: added support for co_discard and aio_discard nbd: added support for multiple in-flight requests Paolo Bonzini (14): sheepdog: add coroutine_fn markers add socket_set_block sheepdog: move coroutine send/recv function to generic code coroutine-io: handle zero returns from recv block: group together the plugging of synchronous IO emulation block: add bdrv_co_flush support block: add bdrv_co_discard and bdrv_aio_discard support nbd: fix error handling in the server nbd: add support for NBD_CMD_FLUSH nbd: add support for NBD_CMD_FLAG_FUA nbd: add support for NBD_CMD_TRIM nbd: switch to asynchronous operation nbd: split requests nbd: allow multiple in-flight requests Stefan Hajnoczi (1): block: emulate .bdrv_flush() using .bdrv_aio_flush() block.c | 228 +++++++++++++++++++++++++++++++++++++---- block.h | 3 + block/blkdebug.c | 6 - block/blkverify.c | 9 -- block/nbd.c | 292 ++++++++++++++++++++++++++++++++++++++++++++++------- block/qcow.c | 6 - block/qcow2.c | 19 ---- block/qed.c | 6 - block/raw-posix.c | 18 ---- block/sheepdog.c | 239 ++++++-------------------------------------- block_int.h | 10 ++- cutils.c | 183 +++++++++++++++++++++++++++++++++ nbd.c | 66 ++++++++++-- oslib-posix.c | 7 ++ oslib-win32.c | 6 + qemu-common.h | 30 ++++++ qemu_socket.h | 1 + trace-events | 1 + 18 files changed, 786 insertions(+), 344 deletions(-) -- 1.7.6