From 0ce342d39f359d23c92ab94efb910b84a634094a Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 5 Sep 2016 10:01:45 -0400 Subject: [PATCH] rbd-nbd: fix kernel deadlock during teuthology testing Fixes: http://tracker.ceph.com/issues/16921 Signed-off-by: Jason Dillaman (cherry picked from commit ce7c1520a8019f011fa34dd898af317f78974577) --- src/tools/rbd_nbd/rbd-nbd.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc index 4b014dd7984eb..d6dae2073f69a 100644 --- a/src/tools/rbd_nbd/rbd-nbd.cc +++ b/src/tools/rbd_nbd/rbd-nbd.cc @@ -235,6 +235,7 @@ private: switch (ctx->command) { case NBD_CMD_DISC: + // RBD_DO_IT will return when pipe is closed dout(0) << "disconnect request received" << dendl; return; case NBD_CMD_WRITE: @@ -649,9 +650,10 @@ static int do_unmap() return nbd; } - if (ioctl(nbd, NBD_DISCONNECT) < 0) + // alert the reader thread to shut down + if (ioctl(nbd, NBD_DISCONNECT) < 0) { cerr << "rbd-nbd: the device is not used" << std::endl; - ioctl(nbd, NBD_CLEAR_SOCK); + } close(nbd); return 0; @@ -726,6 +728,7 @@ static int rbd_nbd(int argc, const char *argv[]) env_to_vec(args); 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", ""); std::vector::iterator i; std::ostringstream err; -- 2.39.5