From: Venky Shankar Date: Tue, 18 Mar 2025 08:57:34 +0000 (+0000) Subject: Revert "mds/rename: Handle existing destdn referent remote" X-Git-Tag: testing/wip-vshankar-testing-20260223.155722^2~31 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eabee04c855df7daab9fdd9f732bf48805f1c974;p=ceph-ci.git Revert "mds/rename: Handle existing destdn referent remote" This reverts commit 04b1ead3e45894f95ddbc957914aecc47dc64478. Signed-off-by: Venky Shankar --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 77ed8b6aa04..fa4af067fae 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -10104,33 +10104,6 @@ void Server::_rename_prepare(const MDRequestRef& mdr, pi.inode->version = oldin->pre_dirty(); tpi = pi.inode.get(); } - } else if (destdnl->is_referent_remote()) { //non-linkmerge case - CInode *oldrefi = destdnl->get_referent_inode(); - ceph_assert(straydn && oldrefi); // moving to straydn. - dout(10) << " destdnl is referent. oldrefi " << *oldrefi << dendl; - - // nlink-- targeti - if (oldin->is_auth()) { - auto pi = oldin->project_inode(mdr); - pi.inode->version = oldin->pre_dirty(); - tpi = pi.inode.get(); - - // Remove referent inode from primary if destdnl exists and is referent - tpi->remove_referent_ino(oldrefi->ino()); - dout(20) << "_rename_prepare destdnl exists and is referent, referent_inodes " << std::hex - << tpi->get_referent_inodes() << " referent ino removed " << oldrefi->ino() << dendl; - } - - // link--, and move referent inode - if (destdn->is_auth()) { - auto pi= oldrefi->project_inode(mdr); //project_snaprealm - pi.inode->version = straydn->pre_dirty(pi.inode->version); - //backtrace updation is not required - trpi = pi.inode.get(); - trpi->nlink = 0; - oldrefi->state_set(CInode::STATE_ORPHAN); - } - straydn->push_projected_linkage(oldrefi); } } else if (linkmerge && destdnl->is_referent_remote()) { CInode *oldrefi = destdnl->get_referent_inode(); @@ -10360,23 +10333,6 @@ void Server::_rename_prepare(const MDRequestRef& mdr, mdcache->journal_cow_dentry(mdr.get(), metablob, oldin_pdn); metablob->add_primary_dentry(oldin_pdn, oldin, true); } - // referent inode stuff - if (destdnl->is_referent_remote()) { //non-linkmerge case - CInode *oldrefi = destdnl->get_referent_inode(); - ceph_assert(straydn); - ceph_assert(oldrefi); - if (destdn->is_auth()) { - // No snapshot on referent inode - Ignoring snaprealm projection - // Updating first is required here ? Mostly not required, keeping - // it for now. - straydn->first = mdcache->get_global_snaprealm()->get_newest_seq() + 1; - metablob->add_primary_dentry(straydn, oldrefi, true, true); - } else if (force_journal_stray) { - dout(10) << " forced journaling referent straydn " << *straydn << dendl; - metablob->add_dir_context(straydn->get_dir()); - metablob->add_primary_dentry(straydn, oldrefi, true); - } - } } } else if (linkmerge && destdnl->is_referent_remote()) { CInode *oldrefi = destdnl->get_referent_inode(); @@ -10555,31 +10511,8 @@ void Server::_rename_apply(const MDRequestRef& mdr, CDentry *srcdn, CDentry *des oldin->pop_and_dirty_projected_inode(mdr->ls, mdr); mdcache->touch_dentry_bottom(straydn); // drop dn as quickly as possible. - } else if (destdnl->is_remote() || destdnl->is_referent_remote()) { - if (destdnl->is_referent_remote()) { //non-linkmerge case - ceph_assert(straydn); - dout(10) << __func__ << " linkmerge:no referent straydn is " << *straydn << dendl; - - // No snapshots on referent inodes - skipping snaprealm related stuff - // on referent inode - CInode *oldrefin = destdnl->get_referent_inode(); - ceph_assert(oldrefin); - - destdn->get_dir()->unlink_inode(destdn, false); - - straydn->pop_projected_linkage(); - if (mdr->is_peer() && !mdr->more()->peer_update_journaled) - ceph_assert(!straydn->is_projected()); // no other projected - - if (destdn->is_auth()) - oldrefin->pop_and_dirty_projected_inode(mdr->ls, mdr); - - mdcache->touch_dentry_bottom(straydn); // drop dn as quickly as possible. - } else if (destdnl->is_remote()) { - // This is already done for referent above. - destdn->get_dir()->unlink_inode(destdn, false); - } - + } else if (destdnl->is_remote()) { + destdn->get_dir()->unlink_inode(destdn, false); if (oldin->is_auth()) { oldin->pop_and_dirty_projected_inode(mdr->ls, mdr); } else if (mdr->peer_request) {