goto close_ret;
}
+ r = rados.init_with_context(g_ceph_context);
+ if (r < 0)
+ goto close_fd;
+
+ r = rados.connect();
+ if (r < 0)
+ goto close_fd;
+
+ r = rados.ioctx_create(cfg->poolname.c_str(), io_ctx);
+ if (r < 0)
+ goto close_fd;
+
+ r = rbd.open(io_ctx, image, cfg->imgname.c_str());
+ if (r < 0)
+ goto close_fd;
+
+ if (cfg->exclusive) {
+ r = image.lock_acquire(RBD_LOCK_MODE_EXCLUSIVE);
+ if (r < 0) {
+ cerr << "rbd-nbd: failed to acquire exclusive lock: " << cpp_strerror(r)
+ << std::endl;
+ goto close_fd;
+ }
+ }
+
+ if (!cfg->snapname.empty()) {
+ r = image.snap_set(cfg->snapname.c_str());
+ if (r < 0)
+ goto close_fd;
+ }
+
+ r = image.stat(info, sizeof(info));
+ if (r < 0)
+ goto close_fd;
+
if (cfg->devpath.empty()) {
char dev[64];
bool try_load_module = true;
read_only = 1;
}
- r = rados.init_with_context(g_ceph_context);
- if (r < 0)
- goto close_nbd;
-
- r = rados.connect();
- if (r < 0)
- goto close_nbd;
-
- r = rados.ioctx_create(cfg->poolname.c_str(), io_ctx);
- if (r < 0)
- goto close_nbd;
-
- r = rbd.open(io_ctx, image, cfg->imgname.c_str());
- if (r < 0)
- goto close_nbd;
-
- if (cfg->exclusive) {
- r = image.lock_acquire(RBD_LOCK_MODE_EXCLUSIVE);
- if (r < 0) {
- cerr << "rbd-nbd: failed to acquire exclusive lock: " << cpp_strerror(r)
- << std::endl;
- goto close_nbd;
- }
- }
-
- if (!cfg->snapname.empty()) {
- r = image.snap_set(cfg->snapname.c_str());
- if (r < 0)
- goto close_nbd;
- }
-
- r = image.stat(info, sizeof(info));
- if (r < 0)
- goto close_nbd;
-
r = ioctl(nbd, NBD_SET_BLKSIZE, RBD_NBD_BLKSIZE);
if (r < 0) {
r = -errno;