diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 054e247116573..9d7b77dc2134e 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -2898,12 +2898,12 @@ bool MDSRank::evict_client(int64_t session_id, std::string tmp = ss.str(); std::vector cmd = {tmp}; - auto kill_mds_session = [this, session_id, on_killed](){ + auto kill_client_session = [this, session_id, wait, on_killed](){ assert(mds_lock.is_locked_by_me()); Session *session = sessionmap.get_session( entity_name_t(CEPH_ENTITY_TYPE_CLIENT, session_id)); if (session) { - if (on_killed) { + if (on_killed || !wait) { server->kill_session(session, on_killed); } else { C_SaferCond on_safe; @@ -2925,7 +2925,7 @@ bool MDSRank::evict_client(int64_t session_id, } }; - auto background_blacklist = [this, cmd](std::function fn){ + auto apply_blacklist = [this, cmd](std::function fn){ assert(mds_lock.is_locked_by_me()); Context *on_blacklist_done = new FunctionContext([this, fn](int r) { @@ -2948,17 +2948,13 @@ bool MDSRank::evict_client(int64_t session_id, monc->start_mon_command(cmd, {}, nullptr, nullptr, on_blacklist_done); }; - auto blocking_blacklist = [this, cmd, background_blacklist](){ - C_SaferCond inline_ctx; - background_blacklist([&inline_ctx](){inline_ctx.complete(0);}); - mds_lock.Unlock(); - inline_ctx.wait(); - mds_lock.Lock(); - }; - if (wait) { if (blacklist) { - blocking_blacklist(); + C_SaferCond inline_ctx; + apply_blacklist([&inline_ctx](){inline_ctx.complete(0);}); + mds_lock.Unlock(); + inline_ctx.wait(); + mds_lock.Lock(); } // We dropped mds_lock, so check that session still exists @@ -2969,12 +2965,12 @@ bool MDSRank::evict_client(int64_t session_id, "for blacklist" << dendl; return true; } - kill_mds_session(); + kill_client_session(); } else { if (blacklist) { - background_blacklist(kill_mds_session); + apply_blacklist(kill_client_session); } else { - kill_mds_session(); + kill_client_session(); } }