1
0
mirror of https://github.com/ceph/ceph synced 2025-04-01 23:02:17 +00:00

mds: misc fixes for dir default layout projection

This commit is contained in:
Greg Farnum 2010-09-24 16:10:58 -07:00
parent 2d194c67f1
commit cb7b360159
3 changed files with 11 additions and 5 deletions

View 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;

View 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)

View 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;