From 4c0b2ac8877211ef043ee6dcaf5148266da505e2 Mon Sep 17 00:00:00 2001 From: Varsha Rao Date: Thu, 25 Jul 2019 12:05:31 -0400 Subject: [PATCH] mds: Move inline functions with loops or switch statements to CInode.cc Signed-off-by: Varsha Rao --- src/mds/CInode.cc | 102 +++++++++++++++++++++++++++++++++++++++++++++- src/mds/CInode.h | 94 ++++-------------------------------------- 2 files changed, 107 insertions(+), 89 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 12a871563c1e0..2c23e1d12e5a5 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -76,6 +76,35 @@ LockType CInode::nestlock_type(CEPH_LOCK_INEST); LockType CInode::flocklock_type(CEPH_LOCK_IFLOCK); LockType CInode::policylock_type(CEPH_LOCK_IPOLICY); +std::string_view CInode::pin_name(int p) const +{ + switch (p) { + case PIN_DIRFRAG: return "dirfrag"; + case PIN_CAPS: return "caps"; + case PIN_IMPORTING: return "importing"; + case PIN_OPENINGDIR: return "openingdir"; + case PIN_REMOTEPARENT: return "remoteparent"; + case PIN_BATCHOPENJOURNAL: return "batchopenjournal"; + case PIN_SCATTERED: return "scattered"; + case PIN_STICKYDIRS: return "stickydirs"; + //case PIN_PURGING: return "purging"; + case PIN_FREEZING: return "freezing"; + case PIN_FROZEN: return "frozen"; + case PIN_IMPORTINGCAPS: return "importingcaps"; + case PIN_EXPORTINGCAPS: return "exportingcaps"; + case PIN_PASTSNAPPARENT: return "pastsnapparent"; + case PIN_OPENINGSNAPPARENTS: return "openingsnapparents"; + case PIN_TRUNCATING: return "truncating"; + case PIN_STRAY: return "stray"; + case PIN_NEEDSNAPFLUSH: return "needsnapflush"; + case PIN_DIRTYRSTAT: return "dirtyrstat"; + case PIN_DIRTYPARENT: return "dirtyparent"; + case PIN_DIRWAITER: return "dirwaiter"; + case PIN_SCRUBQUEUE: return "scrubqueue"; + default: return generic_pin_name(p); + } +} + //int cinode_pins[CINODE_NUM_PINS]; // counts ostream& CInode::print_db_line_prefix(ostream& out) { @@ -93,8 +122,6 @@ struct cinode_lock_info_t cinode_lock_info[] = { }; int num_cinode_locks = sizeof(cinode_lock_info) / sizeof(cinode_lock_info[0]); - - ostream& operator<<(ostream& out, const CInode& in) { string path; @@ -443,6 +470,26 @@ void CInode::pop_and_dirty_projected_inode(LogSegment *ls) projected_nodes.pop_front(); } +CInode::mempool_xattr_map *CInode::get_projected_xattrs() +{ + if (num_projected_xattrs > 0) { + for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) + if (it->xattrs) + return it->xattrs.get(); + } + return &xattrs; +} + +CInode::mempool_xattr_map *CInode::get_previous_projected_xattrs() +{ + if (num_projected_xattrs > 0) { + for (auto it = ++projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) + if (it->xattrs) + return it->xattrs.get(); + } + return &xattrs; +} + sr_t *CInode::prepare_new_srnode(snapid_t snapid) { const sr_t *cur_srnode = get_projected_srnode(); @@ -476,6 +523,18 @@ sr_t *CInode::prepare_new_srnode(snapid_t snapid) return new_srnode; } +const sr_t *CInode::get_projected_srnode() const { + if (num_projected_srnodes > 0) { + for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) + if (it->snapnode != projected_inode::UNDEF_SRNODE) + return it->snapnode; + } + if (snaprealm) + return &snaprealm->srnode; + else + return NULL; +} + void CInode::project_snaprealm(sr_t *new_srnode) { dout(10) << __func__ << " " << new_srnode << dendl; @@ -1525,6 +1584,22 @@ void CInode::decode_store(bufferlist::const_iterator& bl) // ------------------ // locking +SimpleLock* CInode::get_lock(int type) +{ + switch (type) { + case CEPH_LOCK_IFILE: return &filelock; + case CEPH_LOCK_IAUTH: return &authlock; + case CEPH_LOCK_ILINK: return &linklock; + case CEPH_LOCK_IDFT: return &dirfragtreelock; + case CEPH_LOCK_IXATTR: return &xattrlock; + case CEPH_LOCK_ISNAP: return &snaplock; + case CEPH_LOCK_INEST: return &nestlock; + case CEPH_LOCK_IFLOCK: return &flocklock; + case CEPH_LOCK_IPOLICY: return &policylock; + } + return 0; +} + void CInode::set_object_info(MDSCacheObjectInfo &info) { info.ino = ino(); @@ -2962,6 +3037,29 @@ void CInode::choose_lock_states(int dirty_caps) choose_lock_state(&linklock, issued); } +int CInode::count_nonstale_caps() +{ + int n = 0; + for (const auto &p : client_caps) { + if (!p.second.is_stale()) + n++; + } + return n; +} + +bool CInode::multiple_nonstale_caps() +{ + int n = 0; + for (const auto &p : client_caps) { + if (!p.second.is_stale()) { + if (n) + return true; + n++; + } + } + return false; +} + void CInode::set_mds_caps_wanted(mempool::mds_co::compact_map& m) { bool old_empty = mds_caps_wanted.empty(); diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 75ec7f1acddfe..9f0efad43e314 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -347,33 +347,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter 0) { - for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) - if (it->xattrs) - return it->xattrs.get(); - } - return &xattrs; - } - mempool_xattr_map *get_previous_projected_xattrs() { - if (num_projected_xattrs > 0) { - for (auto it = ++projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) - if (it->xattrs) - return it->xattrs.get(); - } - return &xattrs; - } + mempool_xattr_map *get_projected_xattrs(); + mempool_xattr_map *get_previous_projected_xattrs(); sr_t *prepare_new_srnode(snapid_t snapid); void project_snaprealm(sr_t *new_srnode); @@ -530,17 +490,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter 0) { - for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it) - if (it->snapnode != projected_inode::UNDEF_SRNODE) - return it->snapnode; - } - if (snaprealm) - return &snaprealm->srnode; - else - return NULL; - } + const sr_t *get_projected_srnode() const; void mark_snaprealm_global(sr_t *new_srnode); void clear_snaprealm_global(sr_t *new_srnode); @@ -767,20 +717,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter &m, Capability *cap); - SimpleLock* get_lock(int type) override { - switch (type) { - case CEPH_LOCK_IFILE: return &filelock; - case CEPH_LOCK_IAUTH: return &authlock; - case CEPH_LOCK_ILINK: return &linklock; - case CEPH_LOCK_IDFT: return &dirfragtreelock; - case CEPH_LOCK_IXATTR: return &xattrlock; - case CEPH_LOCK_ISNAP: return &snaplock; - case CEPH_LOCK_INEST: return &nestlock; - case CEPH_LOCK_IFLOCK: return &flocklock; - case CEPH_LOCK_IPOLICY: return &policylock; - } - return 0; - } + SimpleLock* get_lock(int type) override; void set_object_info(MDSCacheObjectInfo &info) override; void encode_lock_state(int type, bufferlist& bl) override; @@ -826,25 +763,8 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter