1. 02 11月, 2016 2 次提交
  2. 27 10月, 2016 1 次提交
  3. 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
  4. 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
  5. 20 7月, 2016 1 次提交
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 08 4月, 2016 3 次提交
  13. 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
  14. 17 2月, 2016 5 次提交
    • 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
    • D
      nbd: make server compliant with fixed newstyle spec · 26afa868
      Daniel P. Berrange 提交于
      If the client does not request the fixed new style protocol,
      then we should only accept NBD_OPT_EXPORT_NAME. All other
      options are only valid when fixed new style has been activated.
      
      The qemu-nbd client doesn't currently request fixed new style
      protocol, but this change won't break qemu-nbd, because it
      fortunately only ever uses NBD_OPT_EXPORT_NAME, so was never
      triggering the non-compliant server behaviour.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1455129674-17255-9-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      26afa868
    • D
      nbd: convert to using I/O channels for actual socket I/O · 1c778ef7
      Daniel P. Berrange 提交于
      Now that all callers are converted to use I/O channels for
      initial connection setup, it is possible to switch the core
      NBD protocol handling core over to use QIOChannel APIs for
      actual sockets I/O.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Message-Id: <1455129674-17255-7-git-send-email-berrange@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      1c778ef7
  15. 09 2月, 2016 1 次提交
  16. 05 2月, 2016 1 次提交
    • P
      all: Clean up includes · d38ea87a
      Peter Maydell 提交于
      Clean up includes so that osdep.h is included first and headers
      which it implies are not included manually.
      
      This commit was created with scripts/clean-includes.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Message-id: 1454089805-5470-16-git-send-email-peter.maydell@linaro.org
      d38ea87a
  17. 03 2月, 2016 2 次提交
  18. 26 1月, 2016 1 次提交
  19. 20 1月, 2016 1 次提交
    • K
      block: Rename BDRV_O_INCOMING to BDRV_O_INACTIVE · 04c01a5c
      Kevin Wolf 提交于
      Instead of covering only the state of images on the migration
      destination before the migration is completed, the flag will also cover
      the state of images on the migration source after completion. This
      common state implies that the image is technically still open, but no
      writes will happen and any cached contents will be reloaded from disk if
      and when the image leaves this state.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      04c01a5c
  20. 16 1月, 2016 5 次提交