From cb7b360159d1aac0a00d544bcd3d7f30f963cd8a Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 24 Sep 2010 16:10:58 -0700 Subject: [PATCH] mds: misc fixes for dir default layout projection --- src/mds/CInode.cc | 2 ++ src/mds/CInode.h | 10 ++++++---- src/mds/events/EMetaBlob.h | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index bdc5aebbd227c..62ea66976fac4 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -229,10 +229,12 @@ inode_t *CInode::project_inode(map *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; diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 30774e2bbe7cc..413bcf734cb92 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -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 *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 *xp = NULL, sr_t *sn = NULL, + default_file_layout *dl = NULL) : + inode(in), xattrs(xp), snapnode(sn), dir_layout(dl) {} }; list projected_nodes; // projected values (only defined while dirty) diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index d81f10142ff91..c70bb50141459 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -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; -- 2.39.5