From: Patrick Donnelly Date: Sat, 25 Aug 2018 20:14:09 +0000 (-0700) Subject: Merge PR #23088 into master X-Git-Tag: v14.0.1~484 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=204771b2ac874e053669458dcd16716e2812d59b;p=ceph.git Merge PR #23088 into master * refs/pull/23088/head: mds: adjust export size after renaming directory into freezing subtree mds: clear scatterlock's flushed when removing dirty mds: export subtree part by part mds: change default mds_max_export_size to 20M mds: limit total size of exporting subtrees mds: optimize the way how max export size is enforced mds: make CInode::get_dirfrags container agnostic mds: cleanup MutationImpl::More initialization Reviewed-by: Patrick Donnelly --- 204771b2ac874e053669458dcd16716e2812d59b diff --cc src/mds/CDir.cc index b76fcf5f30186,978f620e4c4e4..8947a49932ef8 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@@ -2985,11 -2974,27 +2985,28 @@@ pair CDir::is_freezing_or_fr if (dir->inode->parent) dir = dir->inode->parent->dir; else - return false; // root on replica + break; // root on replica } + return make_pair(freezing, frozen); } + CDir *CDir::get_freezing_tree_root() + { + if (num_freezing_trees == 0) + return nullptr; + CDir *dir = this; + while (true) { + if (dir->is_freezing_tree_root()) + return dir; + if (dir->is_subtree_root()) + return nullptr; + if (dir->inode->parent) + dir = dir->inode->parent->dir; + else + return nullptr; + } + } + CDir *CDir::get_frozen_tree_root() { assert(is_frozen()); diff --cc src/mds/CDir.h index 4ae1e677a4ddf,6a6b416bee120..423b7f77f500a --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@@ -731,23 -731,14 +731,24 @@@ public void maybe_finish_freeze(); - bool is_freezing() const override { return is_freezing_tree() || is_freezing_dir(); } - bool is_freezing_tree() const; + pair is_freezing_or_frozen_tree() const; + + bool is_freezing() const override { return is_freezing_dir() || is_freezing_tree(); } + bool is_freezing_tree() const { + if (!num_freezing_trees) + return false; + return is_freezing_or_frozen_tree().first; + } bool is_freezing_tree_root() const { return state & STATE_FREEZINGTREE; } bool is_freezing_dir() const { return state & STATE_FREEZINGDIR; } + CDir *get_freezing_tree_root(); bool is_frozen() const override { return is_frozen_dir() || is_frozen_tree(); } - bool is_frozen_tree() const; + bool is_frozen_tree() const { + if (!num_frozen_trees) + return false; + return is_freezing_or_frozen_tree().second; + } bool is_frozen_tree_root() const { return state & STATE_FROZENTREE; } bool is_frozen_dir() const { return state & STATE_FROZENDIR; }