]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: misc fixes for dir default layout projection
authorGreg Farnum <gregf@hq.newdream.net>
Fri, 24 Sep 2010 23:10:58 +0000 (16:10 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Mon, 4 Oct 2010 17:42:45 +0000 (10:42 -0700)
src/mds/CInode.cc
src/mds/CInode.h
src/mds/events/EMetaBlob.h

index bdc5aebbd227c42f6b8b043770fc08f39153bba8..62ea66976fac4b465f5f3bd379894304fddf3966 100644 (file)
@@ -229,10 +229,12 @@ inode_t *CInode::project_inode(map<string,bufferptr> *px)
       *px = xattrs;
     projected_nodes.back()->dir_layout = default_layout;
   } else {
+    default_file_layout *last_dl = projected_nodes.back()->dir_layout;
     projected_nodes.push_back(new projected_inode_t(
         new inode_t(*projected_nodes.back()->inode)));
     if (px)
       *px = *get_projected_xattrs();
+    projected_nodes.back()->dir_layout = last_dl;
   }
   projected_nodes.back()->xattrs = px;
   dout(15) << "project_inode " << projected_nodes.back()->inode << dendl;
index 30774e2bbe7ccf7856c3b4e44db581a3bb278273..413bcf734cb921bf0589585f65517854af833877 100644 (file)
@@ -234,10 +234,12 @@ public:
     sr_t *snapnode;
     default_file_layout *dir_layout;
 
-    projected_inode_t() : inode(NULL), xattrs(NULL), snapnode(NULL) {}
-    projected_inode_t(inode_t *in, sr_t *sn) : inode(in), xattrs(NULL), snapnode(sn) {}
-    projected_inode_t(inode_t *in, map<string, bufferptr> *xp = NULL, sr_t *sn = NULL) :
-      inode(in), xattrs(xp), snapnode(sn) {}
+    projected_inode_t() : inode(NULL), xattrs(NULL), snapnode(NULL), dir_layout(NULL) {}
+    projected_inode_t(inode_t *in, sr_t *sn) : inode(in), xattrs(NULL), snapnode(sn),
+        dir_layout(NULL) {}
+    projected_inode_t(inode_t *in, map<string, bufferptr> *xp = NULL, sr_t *sn = NULL,
+                      default_file_layout *dl = NULL) :
+      inode(in), xattrs(xp), snapnode(sn), dir_layout(dl) {}
   };
   list<projected_inode_t*> projected_nodes;   // projected values (only defined while dirty)
   
index d81f10142ff91bc2c7965439f6bef14a3fbc562d..c70bb501414597355504e8d02f426a7cbc71e4a6 100644 (file)
@@ -545,7 +545,9 @@ private:
     inode_t *pi = in->get_projected_inode();
     default_file_layout *default_layout = NULL;
     if (in->is_dir())
-      default_layout = in->get_projected_node()->dir_layout;
+      default_layout = (in->get_projected_node() ?
+                           in->get_projected_node()->dir_layout :
+                           in->default_layout);
 
     if (!pdft)
       pdft = &in->dirfragtree;