Fix several corner-case bugs in our implementation of the NBD protocol, both as client and as server.
Depends on Kevin's block-next branch: git://repo.or.cz/qemu/kevin.git block-next Also available as a tag at this location: git fetch git://repo.or.cz/qemu/ericb.git nbd-flags-v4 Broken out of a larger v3 series[1], for easier review. There are still some places where we aren't quite compliant (for example, the protocol recommends that the client send NBD_OPT_ABORT before dropping the connection after receiving a valid server response it didn't like but which did not violate protocol), but later series will tackle that. [1] https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg03526.html Changes in v4: rebase to latest block-next 001/11:[----] [--] 'nbd: Use BDRV_REQ_FUA for better FUA where supported' 002/11:[0004] [FC] 'nbd: More debug typo fixes, use correct formats' 003/11:[----] [--] 'nbd: Quit server after any write error' 004/11:[----] [--] 'nbd: Improve server handling of bogus commands' 005/11:[----] [--] 'nbd: Reject unknown request flags' 006/11:[----] [--] 'nbd: Group all Linux-specific ioctl code in one place' 007/11:[----] [--] 'nbd: Clean up ioctl handling of qemu-nbd -c' 008/11:[----] [-C] 'nbd: Limit nbdflags to 16 bits' 009/11:[----] [--] 'nbd: Add qemu-nbd -D for human-readable description' 010/11:[----] [--] 'nbd: Detect servers that send unexpected error values' 011/11:[----] [--] 'nbd: Avoid magic number for NBD max name size' Eric Blake (11): nbd: Use BDRV_REQ_FUA for better FUA where supported nbd: More debug typo fixes, use correct formats nbd: Quit server after any write error nbd: Improve server handling of bogus commands nbd: Reject unknown request flags nbd: Group all Linux-specific ioctl code in one place nbd: Clean up ioctl handling of qemu-nbd -c nbd: Limit nbdflags to 16 bits nbd: Add qemu-nbd -D for human-readable description nbd: Detect servers that send unexpected error values nbd: Avoid magic number for NBD max name size block/nbd-client.h | 2 +- include/block/nbd.h | 13 ++- nbd/nbd-internal.h | 5 +- nbd/client.c | 106 ++++++++++++++++--------- nbd/server.c | 224 +++++++++++++++++++++++++++++++--------------------- qemu-nbd.c | 16 +++- qemu-nbd.texi | 5 +- 7 files changed, 233 insertions(+), 138 deletions(-) -- 2.5.5