*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;
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)
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;