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 (for example, applying
7/8 before any short-circuiting patches stop the client from
sending 0-length requests, and before the server is fixed to
stop botching replies to 0-length requests) proved important
to my ability to test that the patches are needed.

One of the patches is not strictly NBD, and begs the question
of whether other filter drivers (mirror, throttle, etc) should
also be reflecting the read-only status of their underlying
BDS.  Some of my testing included setting up a read-only NBD
server and a read-write qemu-io session, then attempting
'w 0 0', 'w -z 0 0', and 'd 0 0'; these should not succeed if
the corresponding 'w 0 1' fails, but the end goal is that the
server shouldn't even need to be involved in these corner cases.

Eric Blake (8):
  nbd-client: Fix error message typos
  nbd/client: Nicer trace of structured reply
  raw: Reflect read-only protocol layer
  nbd-client: Honor server read-only advertisement
  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 +++++++++++++++++++++++++++++++-------
 block/raw-format.c  |  6 ++++++
 nbd/client.c        |  4 +++-
 nbd/server.c        | 23 +++++++++++++++++++++--
 nbd/trace-events    |  3 ++-
 6 files changed, 76 insertions(+), 16 deletions(-)

-- 
2.13.6


Reply via email to