]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-nbd: no need create asok file for unmap and list-mapped commands.
authorPan Liu <pan.liu@istuary.com>
Thu, 16 Feb 2017 14:17:52 +0000 (22:17 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 25 Apr 2017 13:48:00 +0000 (15:48 +0200)
Fixes: http://tracker.ceph.com/issues/17951
Signed-off-by: Pan Liu <liupan1111@gmail.com>
(cherry picked from commit 72352653d585ef89043a4ece371b5c0cb3f6f32a)

src/tools/rbd_nbd/rbd-nbd.cc

index 5aeb8015a95c55db6a7508041b2c9f72f9d7e159..2e399ab8328943f1469996b7b73d32b46270b8c1 100644 (file)
@@ -489,7 +489,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;
 
@@ -511,6 +511,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);
@@ -699,8 +708,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;
@@ -742,8 +749,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;
@@ -782,11 +787,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;
@@ -875,7 +876,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;