void version(int *major, int *minor, int *extra);
- Image *image_open(pool_t pool, const char *name);
- Image *image_open(pool_t pool, const char *name, const char *snapname);
+ int open(pool_t pool, Image *image, const char *name);
+ int open(pool_t pool, Image *image, const char *name, const char *snapname);
int list(pool_t pool, std::vector<std::string>& names);
int create(pool_t pool, const char *name, size_t size, int *order);
int remove(pool_t pool, const char *name);
class Image
{
public:
- Image();
- Image(image_ctx_t ctx_);
~Image();
- void close();
int resize(size_t size);
int stat(image_info_t &info, size_t infosize);
int aio_read(off_t off, size_t len, ceph::bufferlist& bl, RBD::AioCompletion *c);
private:
+ /* Image instances only come from RBD::open */
+ Image(image_ctx_t ctx_);
+ friend class RBD;
+
Image(const Image& rhs);
const Image& operator=(const Image& rhs);
rbd_version(major, minor, extra);
}
-Image *RBD::image_open(pool_t pool, const char *name)
+int RBD::open(pool_t pool, Image *image, const char *name)
{
- return image_open(pool, name, NULL);
+ return open(pool, image, name, NULL);
}
-Image *RBD::image_open(pool_t pool, const char *name, const char *snapname)
+int RBD::open(pool_t pool, Image *image, const char *name, const char *snapname)
{
ImageCtx *ictx = new ImageCtx(name, pool);
if (!ictx)
- return NULL;
+ return -ENOMEM;
+
int r = librbd::open_image(pool, ictx, name, snapname);
if (r < 0)
- return NULL;
+ return r;
- Image *image = new Image((image_ctx_t)ictx);
- return image;
+ image = new Image((image_ctx_t)ictx);
+ return 0;
}
int RBD::create(pool_t pool, const char *name, size_t size, int *order)
Image
*/
-Image::Image()
-{
-}
-
Image::Image(image_ctx_t ctx_) : ctx(ctx_)
{
}
Image::~Image()
-{
-}
-
-void Image::close()
{
ImageCtx *ictx = (ImageCtx *)ctx;
close_image(ictx);