1. 07 6月, 2017 1 次提交
    • V
      nbd: read_sync and friends: return 0 on success · f5d406fe
      Vladimir Sementsov-Ogievskiy 提交于
      functions read_sync, drop_sync, write_sync, and also
      nbd_negotiate_write, nbd_negotiate_read, nbd_negotiate_drop_sync
      returns number of processed bytes. But what this number can be,
      except requested number of bytes?
      
      Actually, underlying nbd_wr_syncv function returns a value >= 0 and
      != requested_bytes only on eof on read operation. So, firstly, it is
      impossible on write (let's add an assert) and on read it actually
      means, that communication is broken (except nbd_receive_reply, see
      below).
      
      Most of callers operate like this:
         if (func(..., size) != size) {
             /* error path */
         }
      , i.e.:
        1. They are not interested in partial success
        2. Extra duplications in code (especially bad are duplications of
           magic numbers)
        3. User doesn't see actual error message, as return code is lost.
           (this patch doesn't fix this point, but it makes fixing easier)
      
      Several callers handles ret >= 0 and != requested-size separately, by
      just returning EINVAL in this case. This patch makes read_sync and
      friends return EINVAL in this case, so final behavior is the same.
      
      And only one caller - nbd_receive_reply() does something not so
      obvious. It returns EINVAL for ret > 0 and != requested-size, like
      previous group, but for ret == 0 it returns 0. The only caller of
      nbd_receive_reply() - nbd_read_reply_entry() handles ret == 0 in the
      same way as ret < 0, so for now it doesn't matter. However, in
      following commits error path handling will be improved and we'll need
      to distinguish success from fail in this case too. So, this patch adds
      separate helper for this case - read_sync_eof.
      Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20170516094533.6160-3-vsementsov@virtuozzo.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      f5d406fe
  2. 01 3月, 2017 3 次提交
  3. 21 2月, 2017 1 次提交
  4. 04 1月, 2017 1 次提交
  5. 02 11月, 2016 9 次提交
    • E
      nbd: Implement NBD_CMD_WRITE_ZEROES on server · 1f4d6d18
      Eric Blake 提交于
      Upstream NBD protocol recently added the ability to efficiently
      write zeroes without having to send the zeroes over the wire,
      along with a flag to control whether the client wants to allow
      a hole.
      
      Note that when it comes to requiring full allocation, vs.
      permitting optimizations, the NBD spec intentionally picked a
      different sense for the flag; the rules in qemu are:
      MAY_UNMAP == 0: must write zeroes
      MAY_UNMAP == 1: may use holes if reads will see zeroes
      
      while in NBD, the rules are:
      FLAG_NO_HOLE == 1: must write zeroes
      FLAG_NO_HOLE == 0: may use holes if reads will see zeroes
      
      In all cases, the 'may use holes' scenario is optional (the
      server need not use a hole, and must not use a hole if
      subsequent reads would not see zeroes).
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-16-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      1f4d6d18
    • E
      nbd: Improve server handling of shutdown requests · b6f5d3b5
      Eric Blake 提交于
      NBD commit 6d34500b clarified how clients and servers are supposed
      to behave before closing a connection. It added NBD_REP_ERR_SHUTDOWN
      (for the server to announce it is about to go away during option
      haggling, so the client should quit sending NBD_OPT_* other than
      NBD_OPT_ABORT) and ESHUTDOWN (for the server to announce it is about
      to go away during transmission, so the client should quit sending
      NBD_CMD_* other than NBD_CMD_DISC).  It also clarified that
      NBD_OPT_ABORT gets a reply, while NBD_CMD_DISC does not.
      
      This patch merely adds the missing reply to NBD_OPT_ABORT and teaches
      the client to recognize server errors.  Actually teaching the server
      to send NBD_REP_ERR_SHUTDOWN or ESHUTDOWN would require knowing that
      the server has been requested to shut down soon (maybe we could do
      that by installing a SIGINT handler in qemu-nbd, which transitions
      from RUNNING to a new state that waits for the client to react,
      rather than just out-right quitting - but that's a bigger task for
      another day).
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-15-git-send-email-eblake@redhat.com>
      [Move dummy ESHUTDOWN to include/qemu/osdep.h. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      b6f5d3b5
    • E
      nbd: Support shorter handshake · c203c59a
      Eric Blake 提交于
      The NBD Protocol allows the server and client to mutually agree
      on a shorter handshake (omit the 124 bytes of reserved 0), via
      the server advertising NBD_FLAG_NO_ZEROES and the client
      acknowledging with NBD_FLAG_C_NO_ZEROES (only possible in
      newstyle, whether or not it is fixed newstyle).  It doesn't
      shave much off the wire, but we might as well implement it.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NAlex Bligh <alex@alex.org.uk>
      Message-Id: <1476469998-28592-13-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      c203c59a
    • E
      nbd: Send message along with server NBD_REP_ERR errors · 36683283
      Eric Blake 提交于
      The NBD Protocol allows us to send human-readable messages
      along with any NBD_REP_ERR error during option negotiation;
      make use of this fact for clients that know what to do with
      our message.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-8-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      36683283
    • E
      nbd: Share common reply-sending code in server · 526e5c65
      Eric Blake 提交于
      Rather than open-coding NBD_REP_SERVER, reuse the code we
      already have by adding a length parameter.  Additionally,
      the refactoring will make adding NBD_OPT_GO in a later patch
      easier.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-7-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      526e5c65
    • E
      nbd: Rename struct nbd_request and nbd_reply · ed2dd912
      Eric Blake 提交于
      Our coding convention prefers CamelCase names, and we already
      have other existing structs with NBDFoo naming.  Let's be
      consistent, before later patches add even more structs.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-6-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      ed2dd912
    • E
      nbd: Rename NBDRequest to NBDRequestData · 315f78ab
      Eric Blake 提交于
      We have both 'struct NBDRequest' and 'struct nbd_request'; making
      it confusing to see which does what.  Furthermore, we want to
      rename nbd_request to align with our normal CamelCase naming
      conventions.  So, rename the struct which is used to associate
      the data received during request callbacks, while leaving the
      shorter name for the description of the request sent over the
      wire in the NBD protocol.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-4-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      315f78ab
    • E
      nbd: Treat flags vs. command type as separate fields · b626b51a
      Eric Blake 提交于
      Current upstream NBD documents that requests have a 16-bit flags,
      followed by a 16-bit type integer; although older versions mentioned
      only a 32-bit field with masking to find flags.  Since the protocol
      is in network order (big-endian over the wire), the ABI is unchanged;
      but dealing with the flags as a separate field rather than masking
      will make it easier to add support for upcoming NBD extensions that
      increase the number of both flags and commands.
      
      Improve some comments in nbd.h based on the current upstream
      NBD protocol (https://github.com/yoe/nbd/blob/master/doc/proto.md),
      and touch some nearby code to keep checkpatch.pl happy.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-3-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      b626b51a
    • E
      nbd: Add qemu-nbd -D for human-readable description · b1a75b33
      Eric Blake 提交于
      The NBD protocol allows servers to advertise a human-readable
      description alongside an export name during NBD_OPT_LIST.  Add
      an option to pass through the user's string to the NBD client.
      
      Doing this also makes it easier to test commit 200650d4, which
      is the client counterpart of receiving the description.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1476469998-28592-2-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      b1a75b33
  6. 27 10月, 2016 1 次提交
  7. 06 9月, 2016 1 次提交
    • K
      nbd-server: Use a separate BlockBackend · cd7fca95
      Kevin Wolf 提交于
      The builtin NBD server uses its own BlockBackend now instead of reusing
      the monitor/guest device one.
      
      This means that it has its own writethrough setting now. The builtin
      NBD server always uses writeback caching now regardless of whether the
      guest device has WCE enabled. qemu-nbd respects the cache mode given on
      the command line.
      
      We still need to keep a reference to the monitor BB because we put an
      eject notifier on it, but we don't use it for any I/O.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      cd7fca95
  8. 04 8月, 2016 2 次提交
    • E
      nbd: Limit nbdflags to 16 bits · 7423f417
      Eric Blake 提交于
      Rather than asserting that nbdflags is within range, just give
      it the correct type to begin with :)  nbdflags corresponds to
      the per-export portion of NBD Protocol "transmission flags", which
      is 16 bits in response to NBD_OPT_EXPORT_NAME and NBD_OPT_GO.
      
      Furthermore, upstream NBD has never passed the global flags to
      the kernel via ioctl(NBD_SET_FLAGS) (the ioctl was first
      introduced in NBD 2.9.22; then a latent bug in NBD 3.1 actually
      tried to OR the global flags with the transmission flags, with
      the disaster that the addition of NBD_FLAG_NO_ZEROES in 3.9
      caused all earlier NBD 3.x clients to treat every export as
      read-only; NBD 3.10 and later intentionally clip things to 16
      bits to pass only transmission flags).  Qemu should follow suit,
      since the current two global flags (NBD_FLAG_FIXED_NEWSTYLE
      and NBD_FLAG_NO_ZEROES) have no impact on the kernel's behavior
      during transmission.
      
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      
      Message-Id: <1469129688-22848-3-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      7423f417
    • E
      nbd: Fix bad flag detection on server · 5bee0f47
      Eric Blake 提交于
      Commit ab7c548e added a check for invalid flags, but used an
      early return on error instead of properly going through the
      cleanup label.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      
      Message-Id: <1469129688-22848-2-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      5bee0f47
  9. 20 7月, 2016 1 次提交
  10. 13 7月, 2016 1 次提交
    • P
      coroutine: move entry argument to qemu_coroutine_create · 0b8b8753
      Paolo Bonzini 提交于
      In practice the entry argument is always known at creation time, and
      it is confusing that sometimes qemu_coroutine_enter is used with a
      non-NULL argument to re-enter a coroutine (this happens in
      block/sheepdog.c and tests/test-coroutine.c).  So pass the opaque value
      at creation time, for consistency with e.g. aio_bh_new.
      
      Mostly done with the following semantic patch:
      
      @ entry1 @
      expression entry, arg, co;
      @@
      - co = qemu_coroutine_create(entry);
      + co = qemu_coroutine_create(entry, arg);
        ...
      - qemu_coroutine_enter(co, arg);
      + qemu_coroutine_enter(co);
      
      @ entry2 @
      expression entry, arg;
      identifier co;
      @@
      - Coroutine *co = qemu_coroutine_create(entry);
      + Coroutine *co = qemu_coroutine_create(entry, arg);
        ...
      - qemu_coroutine_enter(co, arg);
      + qemu_coroutine_enter(co);
      
      @ entry3 @
      expression entry, arg;
      @@
      - qemu_coroutine_enter(qemu_coroutine_create(entry), arg);
      + qemu_coroutine_enter(qemu_coroutine_create(entry, arg));
      
      @ reentry @
      expression co;
      @@
      - qemu_coroutine_enter(co, NULL);
      + qemu_coroutine_enter(co);
      
      except for the aforementioned few places where the semantic patch
      stumbled (as expected) and for test_co_queue, which would otherwise
      produce an uninitialized variable warning.
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      0b8b8753
  11. 17 6月, 2016 8 次提交
    • E
      nbd: Avoid magic number for NBD max name size · 943cec86
      Eric Blake 提交于
      Declare a constant and use that when determining if an export
      name fits within the constraints we are willing to support.
      
      Note that upstream NBD recently documented that clients MUST
      support export names of 256 bytes (not including trailing NUL),
      and SHOULD support names up to 4096 bytes.  4096 is a bit big
      (we would lose benefits of stack-allocation of a name array),
      and we already have other limits in place (for example, qcow2
      snapshot names are clamped around 1024).  So for now, just
      stick to the required minimum, as that's easier to audit than
      a full-scale support for larger names.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      
      Message-Id: <1463006384-7734-12-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      943cec86
    • E
      nbd: Group all Linux-specific ioctl code in one place · 98494e3b
      Eric Blake 提交于
      NBD ioctl()s are used to manage an NBD client session where
      initial handshake is done in userspace, but then the transmission
      phase is handed off to the kernel through a /dev/nbdX device.
      As such, all ioctls sent to the kernel on the /dev/nbdX fd belong
      in client.c; nbd_disconnect() was out-of-place in server.c.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1463006384-7734-7-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      98494e3b
    • E
      nbd: Reject unknown request flags · ab7c548e
      Eric Blake 提交于
      The NBD protocol says that clients should not send a command flag
      that has not been negotiated (whether by the client requesting an
      option during a handshake, or because we advertise support for the
      flag in response to NBD_OPT_EXPORT_NAME), and that servers should
      reject invalid flags with EINVAL.  We were silently ignoring the
      flags instead.  The client can't rely on our behavior, since it is
      their fault for passing the bad flag in the first place, but it's
      better to be robust up front than to possibly behave differently
      than the client was expecting with the attempted flag.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NAlex Bligh <alex@alex.org.uk>
      Message-Id: <1463006384-7734-6-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      ab7c548e
    • E
      nbd: Improve server handling of bogus commands · 29b6c3b3
      Eric Blake 提交于
      We have a few bugs in how we handle invalid client commands:
      
      - A client can send an NBD_CMD_DISC where from + len overflows,
      convincing us to reply with an error and stay connected, even
      though the protocol requires us to silently disconnect. Fix by
      hoisting the special case sooner.
      
      - A client can send an NBD_CMD_WRITE where from + len overflows,
      where we reply to the client with EINVAL without consuming the
      payload; this will normally cause us to fail if the next thing
      read is not the right magic, but in rare cases, could cause us
      to interpret the data payload as valid commands and do things
      not requested by the client. Fix by adding a complete flag to
      track whether we are in sync or must disconnect.
      
      Furthermore, we have split the checks for bogus from/len across
      two functions, when it is easier to do it all at once.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1463006384-7734-5-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      29b6c3b3
    • E
      nbd: Quit server after any write error · 63d5ef86
      Eric Blake 提交于
      We should never ignore failure from nbd_negotiate_send_rep(); if
      we are unable to write to the client, then it is not worth trying
      to continue the negotiation.  Fortunately, the problem is not
      too severe - chances are that the errors being ignored here (mainly
      inability to write the reply to the client) are indications of
      a closed connection or something similar, which will also affect
      the next attempt to interact with the client and eventually reach
      a point where the errors are detected to end the loop.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1463006384-7734-4-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      63d5ef86
    • E
      nbd: More debug typo fixes, use correct formats · 2cb34749
      Eric Blake 提交于
      Clean up some debug message oddities missed earlier; this includes
      some typos, and recognizing that %d is not necessarily compatible
      with uint32_t. Also add a couple messages that I found useful
      while debugging things.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      
      Message-Id: <1463006384-7734-3-git-send-email-eblake@redhat.com>
      [Do not use PRIx16, clang complains. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      2cb34749
    • E
      nbd: Use BDRV_REQ_FUA for better FUA where supported · a0c30369
      Eric Blake 提交于
      Rather than always flushing ourselves, let the block layer
      forward the FUA on to the underlying device - where all
      underlying layers also understand FUA, we are now more
      efficient; and where any underlying layer doesn't understand
      it, now the block layer takes care of the full flush fallback
      on our behalf.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1463006384-7734-2-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      a0c30369
    • P
      nbd: Don't use *_to_cpup() functions · 773dce3c
      Peter Maydell 提交于
      The *_to_cpup() functions are not very useful, as they simply do
      a pointer dereference and then a *_to_cpu(). Instead use either:
       * ld*_*_p(), if the data is at an address that might not be
         correctly aligned for the load
       * a local dereference and *_to_cpu(), if the pointer is
         the correct type and known to be correctly aligned
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-Id: <1465570836-22211-1-git-send-email-peter.maydell@linaro.org>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      773dce3c
  12. 29 5月, 2016 1 次提交
    • E
      nbd: Don't trim unrequested bytes · 353ab969
      Eric Blake 提交于
      Similar to commit df7b97ff, we are mishandling clients that
      give an unaligned NBD_CMD_TRIM request, and potentially
      trimming bytes that occur before their request; which in turn
      can cause potential unintended data loss (unlikely in
      practice, since most clients are sane and issue aligned trim
      requests).  However, while we fixed read and write by switching
      to the byte interfaces of blk_, we don't yet have a byte
      interface for discard.  On the other hand, trim is advisory, so
      rounding the user's request to simply ignore the first and last
      unaligned sectors (or the entire request, if it is sub-sector
      in length) is just fine.
      
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1464173965-9694-1-git-send-email-eblake@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      353ab969
  13. 12 5月, 2016 1 次提交
    • E
      block: Allow BDRV_REQ_FUA through blk_pwrite() · 8341f00d
      Eric Blake 提交于
      We have several block drivers that understand BDRV_REQ_FUA,
      and emulate it in the block layer for the rest by a full flush.
      But without a way to actually request BDRV_REQ_FUA during a
      pass-through blk_pwrite(), FUA-aware block drivers like NBD are
      forced to repeat the emulation logic of a full flush regardless
      of whether the backend they are writing to could do it more
      efficiently.
      
      This patch just wires up a flags argument; followup patches
      will actually make use of it in the NBD driver and in qemu-io.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Acked-by: NDenis V. Lunev <den@openvz.org>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      8341f00d
  14. 22 4月, 2016 1 次提交
    • E
      nbd: Don't mishandle unaligned client requests · df7b97ff
      Eric Blake 提交于
      The NBD protocol does not (yet) force any alignment constraints
      on clients.  Even though qemu NBD clients always send requests
      that are aligned to 512 bytes, we must be prepared for non-qemu
      clients that don't care about alignment (even if it means they
      are less efficient).  Our use of blk_read() and blk_write() was
      silently operating on the wrong file offsets when the client
      made an unaligned request, corrupting the client's data (but
      as the client already has control over the file we are serving,
      I don't think it is a security hole, per se, just a data
      corruption bug).
      
      Note that in the case of NBD_CMD_READ, an unaligned length could
      cause us to return up to 511 bytes of uninitialized trailing
      garbage from blk_try_blockalign() - hopefully nothing sensitive
      from the heap's prior usage is ever leaked in that manner.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Tested-by: NKevin Wolf <kwolf@redhat.com>
      Message-id: 1461249750-31928-1-git-send-email-eblake@redhat.com
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      df7b97ff
  15. 15 4月, 2016 1 次提交
    • E
      nbd: Don't kill server on client that doesn't request TLS · d1129a8a
      Eric Blake 提交于
      Upstream NBD documents (as of commit 4feebc95) that servers MAY
      choose to operate in a conditional mode, where it is up to the
      client whether to use TLS.  For qemu's case, we want to always be
      in FORCEDTLS mode, because of the risk of man-in-the-middle
      attacks, and since we never export more than one device; likewise,
      the qemu client will ALWAYS send NBD_OPT_STARTTLS as its first
      option.  But now that SELECTIVETLS servers exist, it is feasible
      to encounter a (non-qemu) client that is programmed to talk to
      such a server, and does not do NBD_OPT_STARTTLS first, but rather
      wants to probe if it can use a non-encrypted export.
      
      The NBD protocol documents that we should let such a client
      continue trying, on the grounds that maybe the client will get the
      hint to send NBD_OPT_STARTTLS, rather than immediately dropping
      the connection.
      
      Note that NBD_OPT_EXPORT_NAME is a special case: since it is the
      only option request that can't have an error return, we have to
      (continue to) drop the connection on that one; rather, what we are
      fixing here is that all other replies prior to TLS initiation tell
      the client NBD_REP_ERR_TLS_REQD, but keep the connection alive.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-id: 1460671343-18485-1-git-send-email-eblake@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      d1129a8a
  16. 08 4月, 2016 3 次提交
  17. 23 3月, 2016 1 次提交
    • M
      include/qemu/osdep.h: Don't include qapi/error.h · da34e65c
      Markus Armbruster 提交于
      Commit 57cb38b3 included qapi/error.h into qemu/osdep.h to get the
      Error typedef.  Since then, we've moved to include qemu/osdep.h
      everywhere.  Its file comment explains: "To avoid getting into
      possible circular include dependencies, this file should not include
      any other QEMU headers, with the exceptions of config-host.h,
      compiler.h, os-posix.h and os-win32.h, all of which are doing a
      similar job to this file and are under similar constraints."
      qapi/error.h doesn't do a similar job, and it doesn't adhere to
      similar constraints: it includes qapi-types.h.  That's in excess of
      100KiB of crap most .c files don't actually need.
      
      Add the typedef to qemu/typedefs.h, and include that instead of
      qapi/error.h.  Include qapi/error.h in .c files that need it and don't
      get it now.  Include qapi-types.h in qom/object.h for uint16List.
      
      Update scripts/clean-includes accordingly.  Update it further to match
      reality: replace config.h by config-target.h, add sysemu/os-posix.h,
      sysemu/os-win32.h.  Update the list of includes in the qemu/osdep.h
      comment quoted above similarly.
      
      This reduces the number of objects depending on qapi/error.h from "all
      of them" to less than a third.  Unfortunately, the number depending on
      qapi-types.h shrinks only a little.  More work is needed for that one.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      [Fix compilation without the spice devel packages. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      da34e65c
  18. 17 2月, 2016 3 次提交
    • D
      nbd: implement TLS support in the protocol negotiation · f95910fe
      Daniel P. Berrange 提交于
      This extends the NBD protocol handling code so that it is capable
      of negotiating TLS support during the connection setup. This involves
      requesting the STARTTLS protocol option before any other NBD options.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1455129674-17255-14-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      f95910fe
    • D
      nbd: use "" as a default export name if none provided · 69b49502
      Daniel P. Berrange 提交于
      If the user does not provide an export name and the server
      is running the new style protocol, where export names are
      mandatory, use "" as the default export name if the user
      has not specified any. "" is defined in the NBD protocol
      as the default name to use in such scenarios.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1455129674-17255-13-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      69b49502
    • D
      nbd: always query export list in fixed new style protocol · 9344e5f5
      Daniel P. Berrange 提交于
      With the new style protocol, the NBD client will currenetly
      send NBD_OPT_EXPORT_NAME as the first (and indeed only)
      option it wants. The problem is that the NBD protocol spec
      does not allow for returning an error message with the
      NBD_OPT_EXPORT_NAME option. So if the server mandates use
      of TLS, the client will simply see an immediate connection
      close after issuing NBD_OPT_EXPORT_NAME which is not user
      friendly.
      
      To improve this situation, if we have the fixed new style
      protocol, we can sent NBD_OPT_LIST as the first option
      to query the list of server exports. We can check for our
      named export in this list and raise an error if it is not
      found, instead of going ahead and sending NBD_OPT_EXPORT_NAME
      with a name that we know will be rejected.
      
      This improves the error reporting both in the case that the
      server required TLS, and in the case that the client requested
      export name does not exist on the server.
      
      If the server does not support NBD_OPT_LIST, we just ignore
      that and carry on with NBD_OPT_EXPORT_NAME as before.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1455129674-17255-12-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      9344e5f5