mirror of
https://github.com/ceph/ceph
synced 2025-04-11 04:02:04 +00:00
mds: misc fixes for dir default layout projection
This commit is contained in:
parent
2d194c67f1
commit
cb7b360159
@ -229,10 +229,12 @@ inode_t *CInode::project_inode(map<string,bufferptr> *px)
|
|||||||
*px = xattrs;
|
*px = xattrs;
|
||||||
projected_nodes.back()->dir_layout = default_layout;
|
projected_nodes.back()->dir_layout = default_layout;
|
||||||
} else {
|
} else {
|
||||||
|
default_file_layout *last_dl = projected_nodes.back()->dir_layout;
|
||||||
projected_nodes.push_back(new projected_inode_t(
|
projected_nodes.push_back(new projected_inode_t(
|
||||||
new inode_t(*projected_nodes.back()->inode)));
|
new inode_t(*projected_nodes.back()->inode)));
|
||||||
if (px)
|
if (px)
|
||||||
*px = *get_projected_xattrs();
|
*px = *get_projected_xattrs();
|
||||||
|
projected_nodes.back()->dir_layout = last_dl;
|
||||||
}
|
}
|
||||||
projected_nodes.back()->xattrs = px;
|
projected_nodes.back()->xattrs = px;
|
||||||
dout(15) << "project_inode " << projected_nodes.back()->inode << dendl;
|
dout(15) << "project_inode " << projected_nodes.back()->inode << dendl;
|
||||||
|
@ -234,10 +234,12 @@ public:
|
|||||||
sr_t *snapnode;
|
sr_t *snapnode;
|
||||||
default_file_layout *dir_layout;
|
default_file_layout *dir_layout;
|
||||||
|
|
||||||
projected_inode_t() : inode(NULL), xattrs(NULL), snapnode(NULL) {}
|
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) {}
|
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) :
|
dir_layout(NULL) {}
|
||||||
inode(in), xattrs(xp), snapnode(sn) {}
|
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)
|
list<projected_inode_t*> projected_nodes; // projected values (only defined while dirty)
|
||||||
|
|
||||||
|
@ -545,7 +545,9 @@ private:
|
|||||||
inode_t *pi = in->get_projected_inode();
|
inode_t *pi = in->get_projected_inode();
|
||||||
default_file_layout *default_layout = NULL;
|
default_file_layout *default_layout = NULL;
|
||||||
if (in->is_dir())
|
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)
|
if (!pdft)
|
||||||
pdft = &in->dirfragtree;
|
pdft = &in->dirfragtree;
|
||||||
|
Loading…
Reference in New Issue
Block a user