From: Yan, Zheng Date: Wed, 7 Jun 2017 10:21:39 +0000 (+0800) Subject: mds: link inode to newly created remote dentry X-Git-Tag: v12.1.0~5^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=81c36dd55e2071bcac7ce27c5dab86e7838b19af;p=ceph.git mds: link inode to newly created remote dentry this helps stray reintegration in workload that first creates new hardlink, then removes old hardlink Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 43ea584be1b..05791ede724 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -5320,7 +5320,9 @@ void Server::_link_local_finish(MDRequestRef& mdr, CDentry *dn, CInode *targeti, dout(10) << "_link_local_finish " << *dn << " to " << *targeti << dendl; // link and unlock the NEW dentry - dn->pop_projected_linkage(); + CDentry::linkage_t *dnl = dn->pop_projected_linkage(); + if (!dnl->get_inode()) + dn->link_remote(dnl, targeti); dn->mark_dirty(dnpv, mdr->ls); // target inode @@ -5438,7 +5440,9 @@ void Server::_link_remote_finish(MDRequestRef& mdr, bool inc, if (inc) { // link the new dentry - dn->pop_projected_linkage(); + CDentry::linkage_t *dnl = dn->pop_projected_linkage(); + if (!dnl->get_inode()) + dn->link_remote(dnl, targeti); dn->mark_dirty(dpv, mdr->ls); } else { // unlink main dentry