std::string name;
} snap_info_t;
- typedef struct {
- uint64_t size;
- uint64_t obj_size;
- uint64_t num_objs;
- int order;
- char block_name_prefix[RBD_MAX_BLOCK_NAME_SIZE];
- int parent_pool; /* -1 if none */
- char parent_name[RBD_MAX_IMAGE_NAME_SIZE]; /* blank if none */
- } image_info_t;
+ typedef rbd_image_info_t image_info_t;
class RBD
{
info.obj_size = 1 << obj_order;
info.num_objs = header.image_size >> obj_order;
info.order = obj_order;
+ memcpy(&info.block_name_prefix, &header.block_name, RBD_MAX_BLOCK_NAME_SIZE);
+ info.parent_pool = -1;
+ bzero(&info.parent_name, RBD_MAX_IMAGE_NAME_SIZE);
}
string get_block_oid(rbd_obj_header_ondisk *header, uint64_t num)
extern "C" int rbd_stat(rbd_image_t image, rbd_image_info_t *info, size_t infosize)
{
- librbd::image_info_t cpp_info;
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- int r = librbd::info(ictx, cpp_info, infosize);
- if (r < 0)
- return r;
-
- info->size = cpp_info.size;
- info->obj_size = cpp_info.obj_size;
- info->num_objs = cpp_info.num_objs;
- info->order = cpp_info.order;
- return 0;
+ return librbd::info(ictx, *info, infosize);
}
/* snapshots */
{
cout << "rbd image '" << imgname << "':\n"
<< "\tsize " << prettybyte_t(info.size) << " in "
- << info.num_objs << " objects\n"
+ << info.num_objs << " objects"
+ << std::endl
<< "\torder " << info.order
<< " (" << prettybyte_t(info.obj_size) << " objects)"
+ << std::endl
+ << "\tblock_name_prefix: " << info.block_name_prefix
+ << std::endl
+ << "\tparent: " << info.parent_name
+ << " (pool " << info.parent_pool << ")"
<< std::endl;
}