From 8c44f8532a38e2eabf5841fbc0c04d95149ba185 Mon Sep 17 00:00:00 2001 From: Mike Christie Date: Tue, 30 Apr 2019 20:14:31 -0500 Subject: [PATCH] rbd nbd: move server startup code to function The netlink connect cmd interface requires the server to be running when the connect call completes or commands will timeout/fail. This breaks the server code to 2 functions so we can control when it starts and runs. Right now it looks odd in that start_server will allocate and return the server only for it be freed after run, and it is not touched. The netlink enablement patch at the end will use the returned server. Signed-off-by: Mike Christie --- src/tools/rbd_nbd/rbd-nbd.cc | 56 ++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc index 90034b423c40a..5485ce0226bb0 100644 --- a/src/tools/rbd_nbd/rbd-nbd.cc +++ b/src/tools/rbd_nbd/rbd-nbd.cc @@ -751,6 +751,36 @@ done: return r; } +static NBDServer *start_server(Preforker& forker, int fd, librbd::Image& image) +{ + NBDServer *server; + + if (g_conf()->daemonize) { + global_init_postfork_finish(g_ceph_context); + forker.daemonize(); + } + + server = new NBDServer(fd, image); + server->start(); + + init_async_signal_handler(); + register_async_signal_handler(SIGHUP, sighup_handler); + register_async_signal_handler_oneshot(SIGINT, handle_signal); + register_async_signal_handler_oneshot(SIGTERM, handle_signal); + + return server; +} + +static void run_server(void) +{ + ioctl(nbd, NBD_DO_IT); + + unregister_async_signal_handler(SIGHUP, sighup_handler); + unregister_async_signal_handler(SIGINT, handle_signal); + unregister_async_signal_handler(SIGTERM, handle_signal); + shutdown_async_signal_handler(); +} + static int do_map(int argc, const char *argv[], Config *cfg) { int r; @@ -770,6 +800,7 @@ static int do_map(int argc, const char *argv[], Config *cfg) librbd::image_info_t info; Preforker forker; + NBDServer *server; vector args; argv_to_vec(argc, argv, args); @@ -888,33 +919,14 @@ static int do_map(int argc, const char *argv[], Config *cfg) cout << cfg->devpath << std::endl; - if (g_conf()->daemonize) { - global_init_postfork_finish(g_ceph_context); - forker.daemonize(); - } - - { - NBDServer server(fd[1], image); - - server.start(); - - init_async_signal_handler(); - register_async_signal_handler(SIGHUP, sighup_handler); - register_async_signal_handler_oneshot(SIGINT, handle_signal); - register_async_signal_handler_oneshot(SIGTERM, handle_signal); - - ioctl(nbd, NBD_DO_IT); - - unregister_async_signal_handler(SIGHUP, sighup_handler); - unregister_async_signal_handler(SIGINT, handle_signal); - unregister_async_signal_handler(SIGTERM, handle_signal); - shutdown_async_signal_handler(); - } + server = start_server(forker, fd[1], image); + run_server(); r = image.update_unwatch(handle); ceph_assert(r == 0); } + delete server; close_nbd: if (r < 0) { ioctl(nbd, NBD_CLEAR_SOCK); -- 2.39.5