From: Venky Shankar Date: Tue, 18 Mar 2025 09:01:33 +0000 (+0000) Subject: Revert "multi-mds/link: Create referent inode and store backtrace" X-Git-Tag: testing/wip-vshankar-testing-20260223.155722^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=539567755d2b08d619a42e4f75789509a5afe7b3;p=ceph-ci.git Revert "multi-mds/link: Create referent inode and store backtrace" This reverts commit 79c3d122d2e8d13791cd519eeb3117ecd214fa68. Signed-off-by: Venky Shankar --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index af319130111..dbda3c1dfca 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -8021,15 +8021,14 @@ class C_MDS_link_remote_finish : public ServerLogContext { bool inc; CDentry *dn; CInode *targeti; - CInode *referenti; version_t dpv; public: - C_MDS_link_remote_finish(Server *s, const MDRequestRef& r, bool i, CDentry *d, CInode *ti, CInode *ri) : - ServerLogContext(s, r), inc(i), dn(d), targeti(ti), referenti(ri), + C_MDS_link_remote_finish(Server *s, const MDRequestRef& r, bool i, CDentry *d, CInode *ti) : + ServerLogContext(s, r), inc(i), dn(d), targeti(ti), dpv(d->get_projected_version()) {} void finish(int r) override { ceph_assert(r == 0); - server->_link_remote_finish(mdr, inc, dn, targeti, referenti, dpv); + server->_link_remote_finish(mdr, inc, dn, targeti, dpv); } }; @@ -8039,17 +8038,6 @@ void Server::_link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode << (inc ? "link ":"unlink ") << *dn << " to " << *targeti << dendl; - CInode *newi = nullptr; - - // create referent inode. Don't re-create on retry - if (mds->mdsmap->allow_referent_inodes() && inc) { - if (!mdr->alloc_ino && !mdr->used_prealloc_ino) - newi = prepare_new_inode(mdr, dn->get_dir(), inodeno_t(0), targeti->inode->mode, nullptr, true); - else - newi = mdcache->get_inode(mdr->alloc_ino ? mdr->alloc_ino : mdr->used_prealloc_ino); - ceph_assert(newi); - } - // 1. send LinkPrepare to dest (journal nlink++ prepare) mds_rank_t linkauth = targeti->authority().first; if (mdr->more()->witnessed.count(linkauth) == 0) { @@ -8070,7 +8058,6 @@ void Server::_link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode auto req = make_message(mdr->reqid, mdr->attempt, op); targeti->set_object_info(req->get_object_info()); req->op_stamp = mdr->get_op_stamp(); - if (auto& desti_srnode = mdr->more()->desti_srnode) encode(*desti_srnode, req->desti_snapbl); mds->send_message_mds(req, linkauth); @@ -8102,27 +8089,11 @@ void Server::_link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode } if (inc) { - version_t dnpv = dn->pre_dirty(); - - //referent inode stuff - if (newi) { - auto _inode = newi->_get_inode(); - _inode->version = dnpv; - _inode->update_backtrace(); - } - + dn->pre_dirty(); mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1); - - if (newi) { - dout(20) << __func__ << " calling metablob add_remote_dentry with referent_ino= " << newi->ino() << dendl; - le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type(), newi->ino(), newi); // new remote - // journal allocated referent inode. - journal_allocated_inos(mdr, &le->metablob); - dn->push_projected_linkage(newi, targeti->ino(), newi->ino()); - } else { - le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type(), inodeno_t(0), nullptr); // new remote - dn->push_projected_linkage(targeti->ino(), targeti->d_type()); - } + // TODO: Pass referent inode upon creation. It's adding just remote dentry now + le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type(), 0, nullptr); // new remote + dn->push_projected_linkage(targeti->ino(), targeti->d_type()); } else { dn->pre_dirty(); mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, -1); @@ -8132,11 +8103,11 @@ void Server::_link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode } journal_and_reply(mdr, (inc ? targeti : nullptr), dn, le, - new C_MDS_link_remote_finish(this, mdr, inc, dn, targeti, newi)); + new C_MDS_link_remote_finish(this, mdr, inc, dn, targeti)); } void Server::_link_remote_finish(const MDRequestRef& mdr, bool inc, - CDentry *dn, CInode *targeti, CInode *referenti, + CDentry *dn, CInode *targeti, version_t dpv) { dout(10) << "_link_remote_finish " @@ -8154,12 +8125,6 @@ void Server::_link_remote_finish(const MDRequestRef& mdr, bool inc, if (!dnl->get_inode()) dn->link_remote(dnl, targeti); dn->mark_dirty(dpv, mdr->ls); - - if (referenti) { - // dirty referent inode - referenti->mark_dirty(mdr->ls); - referenti->mark_dirty_parent(mdr->ls, true); - } } else { // unlink main dentry dn->get_dir()->unlink_inode(dn); diff --git a/src/mds/Server.h b/src/mds/Server.h index 03ae777e7e4..cf32561ec8c 100644 --- a/src/mds/Server.h +++ b/src/mds/Server.h @@ -307,7 +307,7 @@ public: void _link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode *targeti); void _link_remote_finish(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode *targeti, - CInode *referenti, version_t); + version_t); void handle_peer_link_prep(const MDRequestRef& mdr); void _logged_peer_link(const MDRequestRef& mdr, CInode *targeti, bool adjust_realm);