1. 30 10月, 2012 10 次提交
    • A
      rbd: remove snap_name arg from rbd_add_parse_args() · 819d52bf
      Alex Elder 提交于
      The snapshot name returned by rbd_add_parse_args() just gets saved
      in the rbd_dev eventually.  So just do that inside that function and
      do away with the snap_name argument, both in rbd_add_parse_args()
      and rbd_dev_set_mapping().
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      819d52bf
    • A
      rbd: remove options args from rbd_add_parse_args() · f28e565a
      Alex Elder 提交于
      They "options" argument to rbd_add_parse_args() (and it's partner
      options_size) is now only needed within the function, so there's no
      need to have the caller allocate and pass the options buffer.  Just
      allocate the options buffer within the function using dup_token().
      
      Also distinguish between failures due to failed memory allocation
      and failing because a required argument was missing.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      f28e565a
    • A
      rbd: get rid of snap_name_len · e5c35534
      Alex Elder 提交于
      The value returned in the "snap_name_len" argument to
      rbd_add_parse_args() is never actually used, so get rid of it.
      
      The snap_name_len recorded in rbd_dev_v2_snap_name() is not
      useful either, so get rid of that too.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      e5c35534
    • A
      rbd: do all argument parsing in one place · 0ddebc0c
      Alex Elder 提交于
      This patch makes rbd_add_parse_args() be the single place all
      argument parsing occurs for an image map request:
          - Move the ceph_parse_options() call into that function
          - Use local variables rather than parameters to hold the list
            of monitor addresses supplied
          - Rather than returning it, pass the snapshot name (and its
            length) back via parameters
          - Have the function return a ceph_options structure pointer
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      0ddebc0c
    • A
      rbd: move ceph_parse_options() call up · 78cea76e
      Alex Elder 提交于
      Move option parsing out of rbd_get_client() and into its caller.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      78cea76e
    • A
      rbd: rename snap_exists field · daba5fdb
      Alex Elder 提交于
      A Boolean field "snap_exists" in an rbd mapping is used to indicate
      whether a mapped snapshot has been removed from an image's snapshot
      context, to stop sending requests for that snapshot as soon as we
      know it's gone.
      
      Generalize the interpretation of this field so it applies to
      non-snapshot (i.e. "head") mappings.  That is, define its value
      to be false until the mapping has been set, and then define it to be
      true for both snapshot mappings or head mappings.
      
      Rename the field "exists" to reflect the broader interpretation.
      The rbd_mapping structure is on its way out, so move the field
      back into the rbd_device structure.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      daba5fdb
    • A
      rbd: move snap info out of rbd_mapping struct · 971f839a
      Alex Elder 提交于
      Moving the snap_id and snap_name fields into the separate
      rbd_mapping structure was misguided.  (And in time, perhaps
      we'll do away with that structure altogether...)
      
      Move these fields back into struct rbd_device.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      971f839a
    • A
      rbd: make pool_id a 64 bit value · 86992098
      Alex Elder 提交于
      If a format 2 image has a parent, its pool id will be specified
      using a 64-bit value.  Change the pool id we save for an image to
      match that.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      86992098
    • A
      rbd: remove snapshots on error in rbd_add() · 41f38c2b
      Alex Elder 提交于
      If rbd_dev_snaps_update() has ever been called for an rbd device
      structure there could be snapshot structures on its snaps list.
      In rbd_add(), this function is called but a subsequent error
      path neglected to clean up any of these snapshots.
      
      Add a call to rbd_remove_all_snaps() in the appropriate spot to
      remedy this.  Change a couple of error labels to be a little
      clearer while there.
      
      Drop the leading underscores from the function name; there's nothing
      special about that function that they might signify.  As suggested
      in review, the leading underscores in __rbd_remove_snap_dev() have
      been removed as well.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      41f38c2b
    • A
      rbd: simplify rbd_rq_fn() · f7760dad
      Alex Elder 提交于
      When processing a request, rbd_rq_fn() makes clones of the bio's in
      the request's bio chain and submits the results to osd's to be
      satisfied.  If a request bio straddles the boundary between objects
      backing the rbd image, it must be represented by two cloned bio's,
      one for the first part (at the end of one object) and one for the
      second (at the beginning of the next object).
      
      This has been handled by a function bio_chain_clone(), which
      includes an interface only a mother could love, and which has
      been found to have other problems.
      
      This patch defines two new fairly generic bio functions (one which
      replaces bio_chain_clone()) to help out the situation, and then
      revises rbd_rq_fn() to make use of them.
      
      First, bio_clone_range() clones a portion of a single bio, starting
      at a given offset within the bio and including only as many bytes
      as requested.  As a convenience, a request to clone the entire bio
      is passed directly to bio_clone().
      
      Second, bio_chain_clone_range() performs a similar function,
      producing a chain of cloned bio's covering a sub-range of the
      source chain.  No bio_pair structures are used, and if successful
      the result will represent exactly the specified range.
      
      Using bio_chain_clone_range() makes bio_rq_fn() a little easier
      to understand, because it avoids the need to pass very much
      state information between consecutive calls.  By avoiding the need
      to track a bio_pair structure, it also eliminates the problem
      described here:  http://tracker.newdream.net/issues/2933
      
      Note that a block request (and therefore the complete length of
      a bio chain processed in rbd_rq_fn()) is an unsigned int, while
      the result of rbd_segment_length() is u64.  This change makes
      this range trunctation explicit, and trips a bug if the the
      segment boundary is too far off.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      f7760dad
  2. 27 10月, 2012 10 次提交
    • A
      rbd: kill rbd_device->rbd_opts · 069a4b56
      Alex Elder 提交于
      The rbd_device structure has an embedded rbd_options structure.
      Such a structure is needed to work with the generic ceph argument
      parsing code, but there's no need to keep it around once argument
      parsing is done.
      
      Use a local variable to hold the rbd options used in parsing in
      rbd_get_client(), and just transfer its content (it's just a
      read_only flag) into the field in the rbd_mapping sub-structure
      that requires that information.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      Reviewed-by: NDan Mick <dan.mick@inktank.com>
      069a4b56
    • A
      rbd: simplify rbd_merge_bvec() · e5cfeed2
      Alex Elder 提交于
      The aim of this patch is to make what's going on rbd_merge_bvec() a
      bit more obvious than it was before.  This was an issue when a
      recent btrfs bug led us to question whether the merge function was
      working correctly.
      
      Use "obj" rather than "chunk" to indicate the units whose boundaries
      we care about we call (rados) "objects".
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NDan Mick <dan.mick@inktank.com>
      e5cfeed2
    • A
      rbd: increase maximum snapshot name length · d4b125e9
      Alex Elder 提交于
      Change RBD_MAX_SNAP_NAME_LEN to be based on NAME_MAX.  That is a
      practical limit for the length of a snapshot name (based on the
      presence of a directory using the name under /sys/bus/rbd to
      represent the snapshot).
      
      The /sys entry is created by prefixing it with "snap_"; define that
      prefix symbolically, and take its length into account in defining
      the snapshot name length limit.
      
      Enforce the limit in rbd_add_parse_args().  Also delete a dout()
      call in that function that was not meant to be committed.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NDan Mick <dan.mick@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      d4b125e9
    • A
      rbd: verify rbd image order value · db2388b6
      Alex Elder 提交于
      This adds a verification that an rbd image's object order is
      within the upper and lower bounds supported by this implementation.
      
      It must be at least 9 (SECTOR_SHIFT), because the Linux bio system
      assumes that minimum granularity.
      
      It also must be less than 32 (at the moment anyway) because there
      exist spots in the code that store the size of a "segment" (object
      backing an rbd image) in a signed int variable, which can be 32 bits
      including the sign.  We should be able to relax this limit once
      we've verified the code uses 64-bit types where needed.
      
      Note that the CLI tool already limits the order to the range 12-25.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      db2388b6
    • A
      rbd: consolidate rbd_do_op() calls · 4634246d
      Alex Elder 提交于
      The two calls to rbd_do_op() from rbd_rq_fn() differ only in the
      value passed for the snapshot id and the snapshot context.
      
      For reads the snapshot always comes from the mapping, and for writes
      the snapshot id is always CEPH_NOSNAP.
      
      The snapshot context is always null for reads.  For writes, the
      snapshot context always comes from the rbd header, but it is
      acquired under protection of header semaphore and could change
      thereafter, so we can't simply use what's available inside
      rbd_do_op().
      
      Eliminate the snapid parameter from rbd_do_op(), and set it
      based on the I/O direction inside that function instead.  Always
      pass the snapshot context acquired in the caller, but reset it
      to a null pointer inside rbd_do_op() if the operation is a read.
      
      As a result, there is no difference in the read and write calls
      to rbd_do_op() made in rbd_rq_fn(), so just call it unconditionally.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      4634246d
    • A
      rbd: drop rbd_do_op() opcode and flags · ff2e4bb5
      Alex Elder 提交于
      The only callers of rbd_do_op() are in rbd_rq_fn(), where call one
      is used for writes and the other used for reads.  The request passed
      to rbd_do_op() already encodes the I/O direction, and that
      information can be used inside the function to set the opcode and
      flags value (rather than passing them in as arguments).
      
      So get rid of the opcode and flags arguments to rbd_do_op().
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      ff2e4bb5
    • A
      rbd: kill rbd_req_{read,write}() · 13f4042c
      Alex Elder 提交于
      Both rbd_req_read() and rbd_req_write() are simple wrapper routines
      for rbd_do_op(), and each is only called once.  Replace each wrapper
      call with a direct call to rbd_do_op(), and get rid of the wrapper
      functions.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      13f4042c
    • A
      rbd: fix read-only option name · be466c1c
      Alex Elder 提交于
      The name of the "read-only" mapping option was inadvertently changed
      in this commit:
      
          f84344f3 rbd: separate mapping info in rbd_dev
      
      Revert that hunk to return it to what it should be.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NDan Mick <dan.mick@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      be466c1c
    • A
      rbd: zero return code in rbd_dev_image_id() · a0ea3a40
      Alex Elder 提交于
      When rbd_dev_probe() calls rbd_dev_image_id() it expects to get
      a 0 return code if successful, but it is getting a positive value.
      
      The reason is that rbd_dev_image_id() returns the value it gets from
      rbd_req_sync_exec(), which returns the number of bytes read in as a
      result of the request.  (This ultimately comes from
      ceph_copy_from_page_vector() in rbd_req_sync_op()).
      
      Force the return value to 0 when successful in rbd_dev_image_id().
      Do the same in rbd_dev_v2_object_prefix().
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      Reviewed-by: NDan Mick <dan.mick@inktank.com>
      a0ea3a40
    • A
      rbd: fix bug in rbd_dev_id_put() · b213e0b1
      Alex Elder 提交于
      In rbd_dev_id_put(), there's a loop that's intended to determine
      the maximum device id in use.  But it isn't doing that at all,
      the effect of how it's written is to simply use the just-put id
      number, which ignores whole purpose of this function.
      
      Fix the bug.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      b213e0b1
  3. 10 10月, 2012 4 次提交
    • A
      rbd: activate v2 image support · 35152979
      Alex Elder 提交于
      Now that v2 images support is fully implemented, have
      rbd_dev_v2_probe() return 0 to indicate a successful probe.
      
      (Note that an image that implements layering will fail
      the probe early because of the feature chekc.)
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      35152979
    • A
      rbd: implement feature checks · d889140c
      Alex Elder 提交于
      Version 2 images have two sets of feature bit fields.  The first
      indicates features possibly used by the image.  The second indicates
      features that the client *must* support in order to use the image.
      
      When an image (or snapshot) is first examined, we need to make sure
      that the local implementation supports the image's required
      features.  If not, fail the probe for the image.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      d889140c
    • A
      rbd: define rbd_dev_v2_refresh() · 117973fb
      Alex Elder 提交于
      Define a new function rbd_dev_v2_refresh() to update/refresh the
      snapshot context for a format version 2 rbd image.  This function
      will update anything that is not fixed for the life of an rbd
      image--at the moment this is mainly the snapshot context and (for
      a base mapping) the size.
      
      Update rbd_refresh_header() so it selects which function to use
      based on the image format.
      
      Rename __rbd_refresh_header() to be rbd_dev_v1_refresh()
      to be consistent with the naming of its version 2 counterpart.
      Similarly rename rbd_refresh_header() to be rbd_dev_refresh().
      
      Unrelated--we use rbd_image_format_valid() here.  Delete the other
      use of it, which was primarily put in place to ensure that function
      was referenced at the time it was defined.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      117973fb
    • A
      rbd: define rbd_update_mapping_size() · 9478554a
      Alex Elder 提交于
      Encapsulate the code that handles updating the size of a mapping
      after an rbd image has been refreshed.  This is done in anticipation
      of the next patch, which will make this common code for format 1 and
      2 images.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      9478554a
  4. 02 10月, 2012 16 次提交
    • S
      rbd: BUG on invalid layout · 6cae3717
      Sage Weil 提交于
      This shouldn't actually be possible because the layout struct is
      constructed from the RBD header and validated then.
      
      [elder@inktank.com: converted BUG() call to equivalent rbd_assert()]
      Signed-off-by: NSage Weil <sage@inktank.com>
      Reviewed-by: NAlex Elder <elder@inktank.com>
      6cae3717
    • A
      rbd: update remaining header fields for v2 · 6e14b1a6
      Alex Elder 提交于
      There are three fields that are not yet updated for format 2 rbd
      image headers:  the version of the header object; the encryption
      type; and the compression type.  There is no interface defined for
      fetching the latter two, so just initialize them explicitly to 0 for
      now.
      
      Change rbd_dev_v2_snap_context() so the caller can be supplied the
      version for the header object.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      6e14b1a6
    • A
      rbd: get snapshot name for a v2 image · b8b1e2db
      Alex Elder 提交于
      Define rbd_dev_v2_snap_name() to fetch the name for a particular
      snapshot in a format 2 rbd image.
      
      Define rbd_dev_v2_snap_info() to to be a wrapper for getting the
      name, size, and features for a particular snapshot, using an
      interface that matches the equivalent function for version 1 images.
      
      Define rbd_dev_snap_info() wrapper function and use it to call the
      appropriate function for getting the snapshot name, size, and
      features, dependent on the rbd image format.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      b8b1e2db
    • A
      rbd: get the snapshot context for a v2 image · 35d489f9
      Alex Elder 提交于
      Fetch the snapshot context for an rbd format 2 image by calling
      the "get_snapcontext" method on its header object.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      35d489f9
    • A
      rbd: get image features for a v2 image · b1b5402a
      Alex Elder 提交于
      The features values for an rbd format 2 image are fetched from the
      server using a "get_features" method.  The same method is used for
      getting the features for a snapshot, so structure this addition with
      a generic helper routine that can get this information for either.
      
      The server will provide two 64-bit feature masks, one representing
      the features potentially in use for this image (or its snapshot),
      and one representing features that must be supported by the client
      in order to work with the image.
      
      For the time being, neither of these is really used so we keep
      things simple and just record the first feature vector.  Once we
      start using these feature masks, what we record and what we expose
      to the user will most likely change.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      b1b5402a
    • A
      rbd: get the object prefix for a v2 rbd image · 1e130199
      Alex Elder 提交于
      The object prefix of an rbd format 2 image is fetched from the
      server using a "get_object_prefix" method.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      1e130199
    • A
      rbd: add code to get the size of a v2 rbd image · 9d475de5
      Alex Elder 提交于
      The size of an rbd format 2 image is fetched from the server using a
      "get_size" method.  The same method is used for getting the size of
      a snapshot, so structure this addition with a generic helper routine
      that we can get this information for either.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      9d475de5
    • A
      rbd: lay out header probe infrastructure · a30b71b9
      Alex Elder 提交于
      This defines a new function rbd_dev_probe() as a top-level
      function for populating detailed information about an rbd device.
      
      It first checks for the existence of a format 2 rbd image id object.
      If it exists, the image is assumed to be a format 2 rbd image, and
      another function rbd_dev_v2() is called to finish populating
      header data for that image.  If it does not exist, it is assumed to
      be an old (format 1) rbd image, and calls a similar function
      rbd_dev_v1() to populate its header information.
      
      A new field, rbd_dev->format, is defined to record which version
      of the rbd image format the device represents.  For a valid mapped
      rbd device it will have one of two values, 1 or 2.
      
      So far, the format 2 images are not really supported; this is
      laying out the infrastructure for fleshing out that support.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      a30b71b9
    • A
      rbd: encapsulate code that gets snapshot info · cd892126
      Alex Elder 提交于
      Create a function that encapsulates looking up the name, size and
      features related to a given snapshot, which is indicated by its
      index in an rbd device's snapshot context array of snapshot ids.
      
      This interface will be used to hide differences between the format 1
      and format 2 images.
      
      At the moment this (looking up the name anyway) is slightly less
      efficient than what's done currently, but we may be able to optimize
      this a bit later on by cacheing the last lookup if it proves to be a
      problem.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      cd892126
    • A
      rbd: add an rbd features field · 34b13184
      Alex Elder 提交于
      Record the features values for each rbd image and each of its
      snapshots.  This is really something that only becomes meaningful
      for version 2 images, so this is just putting in place code
      that will form common infrastructure.
      
      It may be useful to expand the sysfs entries--and therefore the
      information we maintain--for the image and for each snapshot.
      But I'm going to hold off doing that until we start making
      active use of the feature bits.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      34b13184
    • A
      rbd: don't use index in __rbd_add_snap_dev() · c8d18425
      Alex Elder 提交于
      Pass the snapshot id and snapshot size rather than an index
      to __rbd_add_snap_dev() to specify values for a new snapshot.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      c8d18425
    • A
      rbd: kill create_snap sysfs entry · 02cdb02c
      Alex Elder 提交于
      Josh proposed the following change, and I don't think I could
      explain it any better than he did:
      
          From: Josh Durgin <josh.durgin@inktank.com>
          Date: Tue, 24 Jul 2012 14:22:11 -0700
          To: ceph-devel <ceph-devel@vger.kernel.org>
          Message-ID: <500F1203.9050605@inktank.com>
      
          Right now the kernel still has one piece of rbd management
          duplicated from the rbd command line tool: snapshot creation.
          There's nothing special about snapshot creation that makes it
          advantageous to do from the kernel, so I'd like to remove the
          create_snap sysfs interface.  That is,
      	/sys/bus/rbd/devices/<id>/create_snap
          would be removed.
      
          Does anyone rely on the sysfs interface for creating rbd
          snapshots?  If so, how hard would it be to replace with:
      
      	rbd snap create pool/image@snap
      
          Is there any benefit to the sysfs interface that I'm missing?
      
          Josh
      
      This patch implements this proposal, removing the code that
      implements the "snap_create" sysfs interface for rbd images.
      As a result, quite a lot of other supporting code goes away.
      Suggested-by: NJosh Durgin <josh.durgin@inktank.com>
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      02cdb02c
    • A
      rbd: define rbd_dev_image_id() · 589d30e0
      Alex Elder 提交于
      New format 2 rbd images are permanently identified by a unique image
      id.  Each rbd image also has a name, but the name can be changed.
      A format 2 rbd image will have an object--whose name is based on the
      image name--which maps an image's name to its image id.
      
      Create a new function rbd_dev_image_id() that checks for the
      existence of the image id object, and if it's found, records the
      image id in the rbd_device structure.
      
      Create a new rbd device attribute (/sys/bus/rbd/<num>/image_id) that
      makes this information available.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      589d30e0
    • A
      rbd: support data returned from OSD methods · f8d4de6e
      Alex Elder 提交于
      An OSD object method call can be made using rbd_req_sync_exec().
      Until now this has only been used for creating a new RBD snapshot,
      and that has only required sending data out, not receiving anything
      back from the OSD.
      
      We will now need to get data back from an OSD on a method call, so
      add parameters to rbd_req_sync_exec() that allow a buffer into which
      returned data should be placed to be specified, along with its size.
      
      Previously, rbd_req_sync_exec() passed a null pointer and zero
      size to rbd_req_sync_op(); change this so the new inbound buffer
      information is provided instead.
      
      Rename the "buf" and "len" parameters in rbd_req_sync_op() to
      make it more obvious they are describing inbound data.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      f8d4de6e
    • A
      rbd: pass flags to rbd_req_sync_exec() · 3cb4a687
      Alex Elder 提交于
      In order to allow both read requests and write requests to be
      initiated using rbd_req_sync_exec(), add an OSD flags value
      which can be passed down to rbd_req_sync_op().  Rename the "data"
      and "len" parameters to be more clear that they represent data
      that is outbound.
      
      At this point, this function is still only used (and only works) for
      write requests.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      3cb4a687
    • A
      rbd: set up watch before announcing disk · 3ee4001e
      Alex Elder 提交于
      We're ready to handle header object (refresh) events at the point we
      call rbd_bus_add_dev().  Set up the watch request on the rbd image
      header just after that, and after we've registered the devices for
      the snapshots for the initial snapshot context.  Do this before
      announce the disk as available for use.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      3ee4001e