From 9c5e6df6486e2dc37f07cb37e2e38532c616132d Mon Sep 17 00:00:00 2001 From: "Shen, Hang" Date: Tue, 19 Jan 2021 11:40:12 +0800 Subject: [PATCH] mds: remove CDir::take_sub_waiting() migrator already does the job when importing dirfrag. Signed-off-by: "Shen, Hang" --- src/mds/CDir.cc | 42 ++++++++---------------------------------- src/mds/CDir.h | 1 - src/mds/MDCache.cc | 15 +++------------ 3 files changed, 11 insertions(+), 47 deletions(-) diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index bace9f6b873..d9db8a88b25 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -932,10 +932,8 @@ void CDir::prepare_old_fragment(map& dentry_wai if (!waiting_on_dentry.empty()) { for (const auto &p : waiting_on_dentry) { - auto &e = dentry_waiters[p.first]; - for (const auto &waiter : p.second) { - e.push_back(waiter); - } + std::copy(p.second.begin(), p.second.end(), + std::back_inserter(dentry_waiters[p.first])); } waiting_on_dentry.clear(); put(PIN_DNWAITER); @@ -1075,10 +1073,8 @@ void CDir::split(int bits, std::vector* subs, MDSContext::vec& waiters, b if (f->waiting_on_dentry.empty()) f->get(PIN_DNWAITER); - auto &e = f->waiting_on_dentry[p.first]; - for (const auto &waiter : p.second) { - e.push_back(waiter); - } + std::copy(p.second.begin(), p.second.end(), + std::back_inserter(f->waiting_on_dentry[p.first])); } // FIXME: handle dirty old rstat @@ -1170,10 +1166,8 @@ void CDir::merge(const std::vector& subs, MDSContext::vec& waiters, bool if (!dentry_waiters.empty()) { get(PIN_DNWAITER); for (const auto &p : dentry_waiters) { - auto &e = waiting_on_dentry[p.first]; - for (const auto &waiter : p.second) { - e.push_back(waiter); - } + std::copy(p.second.begin(), p.second.end(), + std::back_inserter(waiting_on_dentry[p.first])); } } @@ -1300,9 +1294,7 @@ void CDir::take_dentry_waiting(std::string_view dname, snapid_t first, snapid_t << " [" << first << "," << last << "] found waiter on snap " << it->first.snapid << " on " << *this << dendl; - for (const auto &waiter : it->second) { - ls.push_back(waiter); - } + std::copy(it->second.begin(), it->second.end(), std::back_inserter(ls)); waiting_on_dentry.erase(it++); } @@ -1310,22 +1302,6 @@ void CDir::take_dentry_waiting(std::string_view dname, snapid_t first, snapid_t put(PIN_DNWAITER); } -void CDir::take_sub_waiting(MDSContext::vec& ls) -{ - dout(10) << __func__ << dendl; - if (!waiting_on_dentry.empty()) { - for (const auto &p : waiting_on_dentry) { - for (const auto &waiter : p.second) { - ls.push_back(waiter); - } - } - waiting_on_dentry.clear(); - put(PIN_DNWAITER); - } -} - - - void CDir::add_waiter(uint64_t tag, MDSContext *c) { // hierarchical? @@ -1355,9 +1331,7 @@ void CDir::take_waiting(uint64_t mask, MDSContext::vec& ls) for (const auto &p : waiting_on_dentry) { dout(10) << "take_waiting dentry " << p.first.name << " snap " << p.first.snapid << " on " << *this << dendl; - for (const auto &waiter : p.second) { - ls.push_back(waiter); - } + std::copy(p.second.begin(), p.second.end(), std::back_inserter(ls)); } waiting_on_dentry.clear(); put(PIN_DNWAITER); diff --git a/src/mds/CDir.h b/src/mds/CDir.h index c8d3e417ad4..0f203872fce 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -498,7 +498,6 @@ public: } void add_dentry_waiter(std::string_view dentry, snapid_t snap, MDSContext *c); void take_dentry_waiting(std::string_view dentry, snapid_t first, snapid_t last, MDSContext::vec& ls); - void take_sub_waiting(MDSContext::vec& ls); // dentry or ino void add_waiter(uint64_t mask, MDSContext *c) override; void take_waiting(uint64_t mask, MDSContext::vec& ls) override; // may include dentry waiters diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index ef6d3c4c82a..5ed8a9181d2 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -10094,11 +10094,6 @@ void MDCache::discover_path(CDir *base, onfinish = new C_MDC_RetryDiscoverPath2(this, base, snap, want_path); base->add_waiter(CDir::WAIT_SINGLEAUTH, onfinish); return; - } else if (from == mds->get_nodeid()) { - MDSContext::vec finished; - base->take_sub_waiting(finished); - mds->queue_waiters(finished); - return; } if ((path_locked && want_path.depth() == 1) || @@ -10563,13 +10558,9 @@ void MDCache::handle_discover_reply(const cref_t &m) } else if (m->is_flag_error_dn()) { frag_t fg = cur->pick_dirfrag(m->get_error_dentry()); CDir *dir = cur->get_dirfrag(fg); - if (dir) { - if (dir->is_auth()) { - dir->take_sub_waiting(finished); - } else { - dir->take_dentry_waiting(m->get_error_dentry(), m->get_wanted_snapid(), - m->get_wanted_snapid(), error); - } + if (dir && !dir->is_auth()) { + dir->take_dentry_waiting(m->get_error_dentry(), m->get_wanted_snapid(), + m->get_wanted_snapid(), error); } } -- 2.39.5