From: Jason Dillaman Date: Mon, 5 Sep 2016 14:01:45 +0000 (-0400) Subject: rbd-nbd: fix kernel deadlock during teuthology testing X-Git-Tag: v11.0.1~277^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=ce7c1520a8019f011fa34dd898af317f78974577;p=ceph-ci.git rbd-nbd: fix kernel deadlock during teuthology testing Fixes: http://tracker.ceph.com/issues/16921 Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc index 07b82fd1ad8..4f70db42403 100644 --- a/src/tools/rbd_nbd/rbd-nbd.cc +++ b/src/tools/rbd_nbd/rbd-nbd.cc @@ -236,6 +236,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: @@ -650,9 +651,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; @@ -727,6 +729,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;