1. 09 5月, 2013 7 次提交
    • A
      rbd: define rbd_dev_v2_header_info() · 2df3fac7
      Alex Elder 提交于
      This rearranges rbd_dev_v2_refresh() so it works more like
      rbd_dev_v1_header_info().  While format 1 images need to read the
      whole header object to get any information, format 2 can collect
      almost all information selectively.  So the one-time initialization
      will remain in a separate function--based on rbd_dev_v2_probe().
      
      Rename rbd_dev_v2_refresh() to be rbd_dev_v2_header_info(), and have
      it call rbd_dev_v2_header_onetime() if it's being called for the
      first time for the given rbd device.
      
      Rename rbd_dev_v2_probe() to be rbd_dev_v2_header_onetime() and
      remove the image size and snapshot context calls it held in
      common with the refresh function.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      2df3fac7
    • A
      rbd: get rid of trivial v1 header wrappers · 99a41ebc
      Alex Elder 提交于
      Get rid of the trivial wrapper functions rbd_dev_v1_refresh() and
      rbd_dev_v1_probe(), substituting rbd_dev_v1_header_read() calls
      in their place.
      
      Rename rbd_dev_v1_header_read() to be rbd_dev_v1_header_info(), to
      be more generic (it will better reflect what happens with format 2
      images).
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      99a41ebc
    • A
      rbd: simplify rbd_dev_v1_probe() · 30d60ba2
      Alex Elder 提交于
      An rbd_dev structure's fields are all zero-filled for an initial
      probe, so there's no need to explicitly zero the parent_spec
      and parent_overlap fields in rbd_dev_v1_probe().  Removing these
      assignments makes rbd_dev_v1_probe() *almost* trivial.
      
      Move the dout() message that announces discovery of an image into
      rbd_dev_image_probe(), generalize to support images in either format
      and only show it if an image is fully discovered.
      
      This highlights that are some unnecessary cleanups in the error
      path for rbd_dev_v1_probe(), so they can be removed.
      
      Now rbd_dev_v1_probe() *is* a trivial wrapper function.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      30d60ba2
    • A
      rbd: update in-core header directly · 662518b1
      Alex Elder 提交于
      Now that rbd_header_from_disk() only fills in one-time fields once,
      we can extend it slightly so it releases the other fields before
      replacing their values.  This way there's no need to pass a
      temporary buffer and then copy all the results in.  Just use the rbd
      device header structure in rbd_header_from_disk() so its values get
      updated directly.
      
      Note that this means we need to take the header semaphore at the
      point we update things.  So pass the rbd_dev rather than the address
      of its header as its first argument to rbd_header_from_disk(), and
      have it return an error code.
      
      As a result, rbd_dev_v1_header_read() does all the work,
      rbd_read_header() becomes unnecessary, and rbd_dev_v1_refresh()
      becomes a very simple wrapper.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      662518b1
    • A
      rbd: refactor rbd_header_from_disk() · bb23e37a
      Alex Elder 提交于
      This rearranges rbd_header_from_disk so that it:
          - allocates the snapshot context right away
          - keeps results in local variables, not changing the passed-in
            header until it's known we'll succeed
          - does initialization of set-once fields in a header only if
            they have not already been set
      
      The last point is moot at the moment, because rbd_read_header()
      (the only caller) always supplies a zero-filled header buffer.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      bb23e37a
    • A
      rbd: zero format 1 header structure earlier · 46578dcd
      Alex Elder 提交于
      The passed-in header structure is zeroed in rbd_header_from_disk().
      Instead, have the caller do it.  Note that there are two callers,
      rbd_dev_v1_refresh() and rbd_dev_v1_probe().  The latter already has
      a zeroed header structure so zeroing it isn't necessary there.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      46578dcd
    • A
      rbd: set the mapping size and features later · f35a4dee
      Alex Elder 提交于
      Defer setting the size and features fields of a mapped image until
      after the Linux disk structure is set up.  Set the capacity of the
      disk after that.
      
      Rearrange the definition of rbd_image_header, separating the fields
      that are set only once from those that can be updated.
      Signed-off-by: NAlex Elder <elder@inktank.com>
      Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
      f35a4dee
  2. 08 5月, 2013 8 次提交
  3. 03 5月, 2013 10 次提交
  4. 02 5月, 2013 15 次提交