Sparked by my question on whether we were handling zero-length reads correctly according to the NBD spec, but grew to fix other things as well such as some typos, tracing weaknesses, and better handling of read-only exports.
The order these patches are listed here is bisection-friendly, but applying the patches out of order is necessary to catch some of the bad behavior being fixed. As evidenced by the iotest 147 change, this WILL flag existing clients with dodgy usage when connecting to a read-only server (such as the default for nbd-server-add). But on the bright side, when libvirt drives storage migration via NBD, it is properly setting up a read-write server with nbd-server-add. Since v1 (https://lists.gnu.org/archive/html/qemu-devel/2017-11/msg00955.html): - Tweak several commit messages now that NBD spec changes landed - merge old 3/8 and 4/8 into single 2/7 that blocks read-write connection to read-only export rather than magically downgrading it [Kevin] 001/7:[----] [--] 'nbd-client: Fix error message typos' 002/7:[down] 'nbd-client: Refuse read-only client with BDRV_O_RDWR' 003/7:[----] [--] 'nbd/client: Nicer trace of structured reply' 004/7:[----] [--] 'nbd: Fix struct name for structured reads' 005/7:[----] [-C] 'nbd-client: Short-circuit 0-length operations' 006/7:[----] [--] 'nbd-client: Stricter enforcing of structured reply spec' 007/7:[----] [--] 'nbd/server: Fix structured read of length 0' Eric Blake (7): nbd-client: Fix error message typos nbd-client: Refuse read-only client with BDRV_O_RDWR nbd/client: Nicer trace of structured reply nbd: Fix struct name for structured reads nbd-client: Short-circuit 0-length operations nbd-client: Stricter enforcing of structured reply spec nbd/server: Fix structured read of length 0 include/block/nbd.h | 18 +++++++++++++----- block/nbd-client.c | 38 +++++++++++++++++++++++++++++++------- nbd/client.c | 4 +++- nbd/server.c | 23 +++++++++++++++++++++-- nbd/trace-events | 3 ++- tests/qemu-iotests/147 | 1 + 6 files changed, 71 insertions(+), 16 deletions(-) -- 2.13.6