]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-nbd: no need create asok file for unmap and list-mapped commands. 12433/head
authorPan Liu <pan.liu@istuary.com>
Thu, 16 Feb 2017 14:17:52 +0000 (22:17 +0800)
committerPan Liu <pan.liu@istuary.com>
Thu, 16 Feb 2017 14:17:52 +0000 (22:17 +0800)
Fixes: http://tracker.ceph.com/issues/17951
Signed-off-by: Pan Liu <liupan1111@gmail.com>
src/tools/rbd_nbd/rbd-nbd.cc

index f49ea6ade5a93dae4765ea3876a936cca1b72433..9e2a8f82031f02aef4f11ed133871c09c7451be2 100644 (file)
@@ -493,7 +493,7 @@ static int check_device_size(int nbd_index, unsigned long expected_size)
   return 0;
 }
 
-static int do_map()
+static int do_map(int argc, const char *argv[])
 {
   int r;
 
@@ -514,6 +514,15 @@ static int do_map()
 
   Preforker forker;
 
+  vector<const char*> args;
+  argv_to_vec(argc, argv, args);
+  env_to_vec(args);
+
+  auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT,
+                         CODE_ENVIRONMENT_DAEMON,
+                         CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS);
+  g_ceph_context->_conf->set_val_or_die("pid_file", "");
+
   if (global_init_prefork(g_ceph_context) >= 0) {
     std::string err;
     r = forker.prefork(err);
@@ -707,8 +716,6 @@ close_ret:
 
 static int do_unmap()
 {
-  common_init_finish(g_ceph_context);
-
   int nbd = open_device(devpath.c_str());
   if (nbd < 0) {
     cerr << "rbd-nbd: failed to open device: " << devpath << std::endl;
@@ -750,8 +757,6 @@ static int do_list_mapped_devices()
   int m = 0;
   int fd[2];
 
-  common_init_finish(g_ceph_context);
-
   if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) == -1) {
     int r = -errno;
     cerr << "rbd-nbd: socketpair failed: " << cpp_strerror(-r) << std::endl;
@@ -790,11 +795,7 @@ static int rbd_nbd(int argc, const char *argv[])
   vector<const char*> args;
 
   argv_to_vec(argc, argv, args);
-  env_to_vec(args);
-  auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT,
-                        CODE_ENVIRONMENT_DAEMON,
-                        CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS);
-  g_ceph_context->_conf->set_val_or_die("pid_file", "");
+  md_config_t().parse_argv(args);
 
   std::vector<const char*>::iterator i;
   std::ostringstream err;
@@ -885,7 +886,7 @@ static int rbd_nbd(int argc, const char *argv[])
         return EXIT_FAILURE;
       }
 
-      r = do_map();
+      r = do_map(argc, argv);
       if (r < 0)
         return EXIT_FAILURE;
       break;