From: Sage Weil Date: Fri, 20 Aug 2010 02:39:38 +0000 (-0700) Subject: mds: drop projected_snaprealm_ptr X-Git-Tag: v0.22~229^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6ea292d090400a6c58a6154971e60e9c08933b6b;p=ceph.git mds: drop projected_snaprealm_ptr Can also get this from the projected_nodes list. --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 0f48e51b75df..e290cefc44e8 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -208,20 +208,16 @@ void CInode::print(ostream& out) inode_t *CInode::project_inode(map *px) { if (projected_nodes.empty()) { - projected_nodes.push_back(new projection_node(new inode_t(inode))); + projected_nodes.push_back(new projected_inode_t(new inode_t(inode))); if (px) *px = xattrs; } else { - projected_nodes.push_back(new projection_node( + projected_nodes.push_back(new projected_inode_t( new inode_t(*projected_nodes.back()->inode))); if (px) *px = *get_projected_xattrs(); } projected_nodes.back()->xattrs = px; - if (px) { - previous_projected_xattrs_ptr = projected_xattrs_ptr; - projected_xattrs_ptr = px; - } dout(15) << "project_inode " << projected_nodes.back()->inode << dendl; return projected_nodes.back()->inode; } @@ -237,10 +233,6 @@ void CInode::pop_and_dirty_projected_inode(LogSegment *ls) map *px = projected_nodes.front()->xattrs; if (px) { xattrs = *px; - if (previous_projected_xattrs_ptr == px) - previous_projected_xattrs_ptr = NULL; - else if (projected_xattrs_ptr == px) - projected_xattrs_ptr = NULL; delete px; } @@ -255,21 +247,19 @@ void CInode::pop_and_dirty_projected_inode(LogSegment *ls) sr_t *CInode::project_snaprealm(snapid_t snapid) { - sr_t *new_snaprealm; - if (!projected_snaprealm_ptr) { - if (snaprealm) - new_snaprealm = new sr_t(snaprealm->srnode); - else { - new_snaprealm = new sr_t(); - new_snaprealm->created = snapid; - new_snaprealm->current_parent_since = snapid; - } + sr_t *cur_srnode = get_projected_srnode(); + sr_t *new_srnode; + + if (cur_srnode) { + new_srnode = new sr_t(*cur_srnode); + } else { + new_srnode = new sr_t(); + new_srnode->created = snapid; + new_srnode->current_parent_since = snapid; } - else - new_snaprealm = new sr_t(*projected_snaprealm_ptr); - dout(0) << "project_snaprealm " << new_snaprealm << dendl; - projected_nodes.back()->snapnode = new_snaprealm; - return new_snaprealm; + dout(0) << "project_snaprealm " << new_srnode << dendl; + projected_nodes.back()->snapnode = new_srnode; + return new_srnode; } /* if newparent != parent, add parent to past_parents @@ -310,8 +300,6 @@ void CInode::pop_projected_snaprealm(sr_t *next_snaprealm) if (invalidate_cached_snaps) snaprealm->invalidate_cached_snaps(); - if (next_snaprealm == projected_snaprealm_ptr) - projected_snaprealm_ptr = NULL; } diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 328da12f0a77..ceb3286e2613 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -196,10 +196,7 @@ public: projected_inode_t(inode_t *in, map *xp = NULL, sr_t *sn = NULL) : inode(in), xattrs(xp), snapnode(sn) {} }; - // projected values (only defined while dirty) - list projected_nodes; - - sr_t *projected_snaprealm_ptr; + list projected_nodes; // projected values (only defined while dirty) inode_t *project_inode(map *px=0); void pop_and_dirty_projected_inode(LogSegment *ls); @@ -250,12 +247,14 @@ public: sr_t *project_snaprealm(snapid_t snapid=0); sr_t *get_projected_srnode() { - if (!projected_snaprealm_ptr) + if (projected_nodes.empty()) { if (snaprealm) - return &snaprealm->srnode; - else return NULL; - else - return projected_snaprealm_ptr; + return &snaprealm->srnode; + else + return NULL; + } else { + return projected_nodes.back()->snapnode; + } } void project_past_parent(SnapRealm *newparent, bufferlist& snapbl); @@ -364,7 +363,6 @@ private: first(f), last(l), last_journaled(0), //last_open_journaled(0), //hack_accessed(true), - projected_snaprealm_ptr(NULL), stickydir_ref(0), parent(0), inode_auth(CDIR_AUTH_DEFAULT),