1. 14 5月, 2013 1 次提交
    • A
      libceph: init sent and completed when starting · c10ebbf5
      Alex Elder 提交于
      The rbd code has a need to be able to restart an osd request that
      has already been started and completed once before.  This currently
      wouldn't work right because the osd client code assumes an osd
      request will be started exactly once  Certain fields in a request
      are never cleared and this leads to trouble if you try to reuse it.
      
      Specifically, the r_sent, r_got_reply, and r_completed fields are
      never cleared.  The r_sent field records the osd incarnation at the
      time the request was sent to that osd.  If that's non-zero, the
      message won't get re-mapped to a target osd properly, and won't be
      put on the unsafe requests list the first time it's sent as it
      should.  The r_got_reply field is used in handle_reply() to ensure
      the reply to a request is processed only once.  And the r_completed
      field is used for lingering requests to avoid calling the callback
      function every time the osd client re-sends the request on behalf of
      its initiator.
      
      Each osd request passes through ceph_osdc_start_request() when
      responsibility for the request is handed over to the osd client for
      completion.  We can safely zero these three fields there each time a
      request gets started.
      
      One last related change--clear the r_linger flag when a request
      is no longer registered as a linger request.
      
      This resolves:
          http://tracker.ceph.com/issues/5026Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      c10ebbf5
  2. 09 5月, 2013 12 次提交
  3. 08 5月, 2013 8 次提交
  4. 03 5月, 2013 10 次提交
  5. 02 5月, 2013 9 次提交
    • A
      rbd: kill off the snapshot list · 33dca39f
      Alex Elder 提交于
      We no longer use the snapshot list for anything.  When we need to
      look up a snapshot name, id, size, or feature mask, we just do it
      directly rather than relying on this list being updated with every
      refresh.  The main reason it existed was for the benefit of the
      device/sysfs entries that previously were associated with snapshots.
      
      So get rid of the snapshot list, and struct rbd_snap, and the
      hundreds of lines of code that supported them.
      
      This resolves:
          http://tracker.ceph.com/issues/4868Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      33dca39f
    • A
      rbd: define rbd_snap_size() and rbd_snap_features() · 2ad3d716
      Alex Elder 提交于
      This patch defines a handful of new functions that will allow
      us to get rid of the rbd device structure's list of snapshots.
      
      Define rbd_snap_id_by_name() to look up a snapshot id given its
      name.  This is efficient for format 1 images but not for format 2.
      Fortunately it only gets called at mapping time so it's not that
      critical.
      
      Use rbd_snap_id_by_name() to find out the id for a snapshot getting
      mapped, and pass that id to new functions rbd_snap_size() and
      rbd_snap_features() to look up information about a given snapshot's
      size and feature mask given its snapshot id.  All this gets done
      in rbd_dev_mapping_set().
      
      As a result, snap_by_name() is no longer needed, so get rid of it.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      2ad3d716
    • A
      rbd: use snap_id not index to look up snap info · 54cac61f
      Alex Elder 提交于
      In order to align with what was needed for format 1 rbd images,
      rbd_dev_v2_snap_info() was set up to take as argument an index into
      the array of snapshot ids in a rbd device's snapshot context.
      
      This switches that around, so we pass the snapshot id instead.
      In doing this, rbd_snap_name() now returns a dynamically-allocated
      string rather than a fixed one, so there's no need to make a
      duplicate in its caller, rbd_dev_spec_update().
      
      This means the following functions take a snapshot id where they
      previously used an index value:
          rbd_dev_snap_info()
          rbd_dev_v1_snap_info()
          rbd_dev_v2_snap_info()
      
      A new function, rbd_dev_snap_index(), determines the snap index for
      format 1 images and uses it to look up the name.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      54cac61f
    • A
      rbd: look up snapshot name in names buffer · 9682fc6d
      Alex Elder 提交于
      Rather than scanning the list of snapshot structures for it, scan
      the snapshot context buffer containing snapshot names in order to
      determine for a format 1 image the name associated with a given
      snapshot id.
      
      Pull out the part of rbd_dev_v1_snap_info() that does this scan into
      a new function, _rbd_dev_v1_snap_name().  Have that function return
      a dynamically-allocated copy of the name, and don't duplicate it in
      rbd_dev_v1_snap_info().
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      9682fc6d
    • A
      rbd: drop obj_request->version · dedc81ea
      Alex Elder 提交于
      Nothing ever uses the version field maintained in the object request
      structure any more, so get rid of it.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      dedc81ea
    • A
      rbd: drop rbd_obj_method_sync() version parameter · e2a58ee5
      Alex Elder 提交于
      Only NULL is passed as the version argument to rbd_obj_method_sync(),
      so get rid of it.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      e2a58ee5
    • A
      rbd: more version parameter removal · cc4a38bd
      Alex Elder 提交于
      Continued from the last patch, more parameters that can go away
      because we no longer have a need to track object versions.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      cc4a38bd
    • A
      rbd: get rid of some version parameters · 7097f8df
      Alex Elder 提交于
      Several functions in rbd have parameters meant to allow the version
      of an object to be passed in or out.  The purpose of those was to
      allow the version of a header object to be maintained, but we no
      longer do that.  As a result, these parameters are never actually
      needed or used, so get rid of them.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      7097f8df
    • A
      rbd: stop tracking header object version · b21ebddd
      Alex Elder 提交于
      The rbd code takes care to maintain the version of the header
      object.  This was done in hopes of using it to detect a change in
      the object between reading it and setting up a watch request to
      be notified of changes.
      
      The mechanism was never fully implemented, however.  And we now
      avoid the original problem by setting up the watch request before
      ever reading the content of the header.
      
      The osd doesn't interpret the object version supplied with a WATCH
      osd op, nor does it use the version supplied with a NOTIFY_ACK op
      (we can just supply 0 for both).  There is therefore no need to
      maintain the header's object version any more, so stop doing so.
      
      We'll be able to simplify some more rbd code in the next few patches
      as a result of this.
      
      This resolves:
          http://tracker.ceph.com/issues/3952Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      b21ebddd