]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: drop projected_snaprealm_ptr
authorSage Weil <sage@newdream.net>
Fri, 20 Aug 2010 02:39:38 +0000 (19:39 -0700)
committerSage Weil <sage@newdream.net>
Fri, 20 Aug 2010 02:39:38 +0000 (19:39 -0700)
Can also get this from the projected_nodes list.

src/mds/CInode.cc
src/mds/CInode.h

index 0f48e51b75df982cba5b5c732969ef7d86802c83..e290cefc44e8c77fb7bb9728dc33d16b4f439491 100644 (file)
@@ -208,20 +208,16 @@ void CInode::print(ostream& out)
 inode_t *CInode::project_inode(map<string,bufferptr> *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<string,bufferptr> *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;
 }
 
 
index 328da12f0a77632ff3cf14232173a958ceee376d..ceb3286e2613b000a68483289415f756aaaac7e2 100644 (file)
@@ -196,10 +196,7 @@ public:
     projected_inode_t(inode_t *in, map<string, bufferptr> *xp = NULL, sr_t *sn = NULL) :
       inode(in), xattrs(xp), snapnode(sn) {}
   };
-  // projected values (only defined while dirty)
-  list<projected_inode_t*> projected_nodes;
-
-  sr_t *projected_snaprealm_ptr;
+  list<projected_inode_t*> projected_nodes;   // projected values (only defined while dirty)
   
   inode_t *project_inode(map<string,bufferptr> *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),