return in;
}
-
+
+void MDCache::replicate_stray(CDentry *straydn, int who, bufferlist& bl)
+{
+ replicate_inode(get_myin(), who, bl);
+ replicate_dir(straydn->get_dir()->inode->get_parent_dn()->get_dir(), who, bl);
+ replicate_dentry(straydn->get_dir()->inode->get_parent_dn(), who, bl);
+ replicate_inode(straydn->get_dir()->inode, who, bl);
+ replicate_dir(straydn->get_dir(), who, bl);
+ replicate_dentry(straydn, who, bl);
+}
+
CDentry *MDCache::add_replica_stray(bufferlist &bl, int from)
{
list<Context*> finished;
it != dn->replicas_end();
it++) {
MDentryUnlink *unlink = new MDentryUnlink(dn->get_dir()->dirfrag(), dn->name);
- if (straydn) {
- replicate_inode(get_myin(), it->first, unlink->straybl);
- replicate_dir(straydn->get_dir()->inode->get_parent_dn()->get_dir(), it->first, unlink->straybl);
- replicate_dentry(straydn->get_dir()->inode->get_parent_dn(), it->first, unlink->straybl);
- replicate_inode(straydn->get_dir()->inode, it->first, unlink->straybl);
- replicate_dir(straydn->get_dir(), it->first, unlink->straybl);
- replicate_dentry(straydn, it->first, unlink->straybl);
- }
+ if (straydn)
+ replicate_stray(straydn, it->first, unlink->straybl);
mds->send_message_mds(unlink, it->first);
}
}
CDir* forge_replica_dir(CInode *diri, frag_t fg, int from);
CDentry *add_replica_dentry(bufferlist::iterator& p, CDir *dir, list<Context*>& finished);
CInode *add_replica_inode(bufferlist::iterator& p, CDentry *dn, list<Context*>& finished);
+
+ void replicate_stray(CDentry *straydn, int who, bufferlist& bl);
CDentry *add_replica_stray(bufferlist &bl, int from);
// -- namespace --
destdn->make_path(req->destdnpath);
req->now = mdr->now;
- if (straydn) {
- mdcache->replicate_inode(straydn->get_dir()->inode, who, req->stray);
- mdcache->replicate_dir(straydn->get_dir(), who, req->stray);
- mdcache->replicate_dentry(straydn, who, req->stray);
- }
+ if (straydn)
+ mdcache->replicate_stray(straydn, who, req->stray);
// srcdn auth will verify our current witness list is sufficient
req->witnesses = mdr->more()->witnessed;