]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: show correct size for snapshots
authorJosh Durgin <josh.durgin@dreamhost.com>
Fri, 21 Oct 2011 20:11:46 +0000 (13:11 -0700)
committerJosh Durgin <josh.durgin@dreamhost.com>
Mon, 24 Oct 2011 22:32:47 +0000 (15:32 -0700)
header.size is the current size of the image.
ImageCtx::get_image_size() already does the right thing for
snapshots.

Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
src/librbd.cc

index 587ee54b50734f451ae4dff77dd67f873ee03c62..39bc5f2b9286d8c231f6baf828016673d8ca3e69 100644 (file)
@@ -150,11 +150,12 @@ namespace librbd {
       return name + RBD_SUFFIX;
     }
 
-    uint64_t get_image_size() {
+    uint64_t get_image_size() const
+    {
       if (snapname.length() == 0) {
        return header.image_size;
       } else {
-       map<std::string,SnapInfo>::iterator p = snaps_by_name.find(snapname);
+       map<std::string,SnapInfo>::const_iterator p = snaps_by_name.find(snapname);
        assert(p != snaps_by_name.end());
        return p->second.size;
       }
@@ -357,7 +358,7 @@ namespace librbd {
   int tmap_set(IoCtx& io_ctx, const string& imgname);
   int tmap_rm(IoCtx& io_ctx, const string& imgname);
   int rollback_image(ImageCtx *ictx, uint64_t snapid, ProgressContext& prog_ctx);
-  void image_info(const rbd_obj_header_ondisk& header, image_info_t& info, size_t info_size);
+  void image_info(const ImageCtx& ictx, image_info_t& info, size_t info_size);
   string get_block_oid(const rbd_obj_header_ondisk &header, uint64_t num);
   uint64_t get_max_block(uint64_t size, int obj_order);
   uint64_t get_max_block(const rbd_obj_header_ondisk &header);
@@ -441,14 +442,14 @@ void init_rbd_header(struct rbd_obj_header_ondisk& ondisk,
   ondisk.snap_names_len = 0;
 }
 
-void image_info(const rbd_obj_header_ondisk& header, image_info_t& info, size_t infosize)
+void image_info(const ImageCtx& ictx, image_info_t& info, size_t infosize)
 {
-  int obj_order = header.options.order;
-  info.size = header.image_size;
+  int obj_order = ictx.header.options.order;
+  info.size = ictx.get_image_size();
   info.obj_size = 1 << obj_order;
-  info.num_objs = header.image_size >> obj_order;
+  info.num_objs = ictx.get_image_size() >> obj_order;
   info.order = obj_order;
-  memcpy(&info.block_name_prefix, &header.block_name, RBD_MAX_BLOCK_NAME_SIZE);
+  memcpy(&info.block_name_prefix, &ictx.header.block_name, RBD_MAX_BLOCK_NAME_SIZE);
   info.parent_pool = -1;
   bzero(&info.parent_name, RBD_MAX_IMAGE_NAME_SIZE);
 }
@@ -828,7 +829,7 @@ int info(ImageCtx *ictx, image_info_t& info, size_t infosize)
     return r;
 
   Mutex::Locker l(ictx->lock);
-  image_info(ictx->header, info, infosize);
+  image_info(*ictx, info, infosize);
   return 0;
 }