From 3067a7ce6ea0272afc55034c4598ce9b1a39f7b6 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Tue, 18 Mar 2025 09:02:20 +0000 Subject: [PATCH] Revert "mds: Handle referent remote similar to remote" This reverts commit 1e5fca1582295c9c89ee4afc1d0406cf17940704. Signed-off-by: Venky Shankar (cherry picked from commit f36dea81ac8e0fc19efdfeb1b664eb06303706bb) --- src/mds/CDentry.cc | 2 +- src/mds/CDir.cc | 8 ++++---- src/mds/MDCache.cc | 40 +++++++++------------------------------- src/mds/Migrator.cc | 2 +- src/mds/ScrubStack.cc | 2 +- src/mds/Server.cc | 4 ++-- 6 files changed, 18 insertions(+), 40 deletions(-) diff --git a/src/mds/CDentry.cc b/src/mds/CDentry.cc index 280da26eebb..fdb4db18f28 100644 --- a/src/mds/CDentry.cc +++ b/src/mds/CDentry.cc @@ -532,7 +532,7 @@ void CDentry::encode_lock_state(int type, bufferlist& bl) encode(c, bl); encode(linkage.get_inode()->ino(), bl); } - else if (linkage.is_remote() || linkage.is_referent_remote()) { + else if (linkage.is_remote()) { c = 2; encode(c, bl); encode(linkage.get_remote_ino(), bl); diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 1445ffc2c98..06d6395d376 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -257,7 +257,7 @@ bool CDir::check_rstats(bool scrub) frag_info.nsubdirs++; else frag_info.nfiles++; - } else if (dnl->is_remote() || dnl->is_referent_remote()) + } else if (dnl->is_remote()) frag_info.nfiles++; } @@ -350,7 +350,7 @@ void CDir::adjust_dentry_lru(CDentry *dn) bool bottom_lru; if (dn->get_linkage()->is_primary()) { bottom_lru = !is_auth() && inode->is_stray(); - } else if (dn->get_linkage()->is_remote() || dn->get_linkage()->is_referent_remote()) { //TODO Is this right for referent remote? + } else if (dn->get_linkage()->is_remote()) { bottom_lru = false; } else { bottom_lru = !is_auth(); @@ -1018,7 +1018,7 @@ void CDir::steal_dentry(CDentry *dn) // move dirty inode rstat to new dirfrag if (in->is_dirty_rstat()) dirty_rstat_inodes.push_back(&in->dirty_rstat_item); - } else if (dn->get_linkage()->is_remote() || dn->get_linkage()->is_referent_remote()) { + } else if (dn->get_linkage()->is_remote()) { if (dn->get_linkage()->get_remote_d_type() == DT_DIR) _fnode->fragstat.nsubdirs++; else @@ -3499,7 +3499,7 @@ void CDir::verify_fragstat() else c.nfiles++; } - if (dn->is_remote() || dn->is_referent_remote()) { + if (dn->is_remote()) { if (dn->get_remote_d_type() == DT_DIR) c.nsubdirs++; else diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 7f6ae7ee01b..ee7134f4fe7 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -1698,14 +1698,7 @@ void MDCache::journal_cow_dentry(MutationImpl *mut, EMetaBlob *metablob, dn->first = dir_follows+1; if (realm->has_snaps_in_range(oldfirst, dir_follows)) { CDir *dir = dn->dir; - /* TODO: No need to cow referent inode. So just the remote dentry is prepared, - * journalled and added to dirty_cow_dentries list. But when the journal is - * replayed. How does this play out ? Test this out. - */ - if (mds->mdsmap->allow_referent_inodes()) { - dout(10) << __func__ << " lookout-1 - Adding dentry as remote for journal when referent inode feature is enabled !!! " - << " dentry " << *dn << " first " << oldfirst << " last " << dir_follows << dendl; - } + // TODO: What does this mean for referent inode ?? Passing nullptr for now. CDentry *olddn = dir->add_remote_dentry(dn->get_name(), nullptr, in->ino(), in->d_type(), dn->alternate_name, oldfirst, dir_follows); dout(10) << " olddn " << *olddn << dendl; ceph_assert(dir->is_projected()); @@ -1791,15 +1784,8 @@ void MDCache::journal_cow_dentry(MutationImpl *mut, EMetaBlob *metablob, metablob->add_primary_dentry(olddn, 0, true, false, false, need_snapflush); mut->add_cow_dentry(olddn); } else { - ceph_assert(dnl->is_remote() || dnl->is_referent_remote()); - /* TODO: No need to cow referent inode. So just the remote dentry is prepared, - * journalled and added to dirty_cow_dentries list. But when the journal is - * replayed. How does this play out ? Test this out. - */ - if (mds->mdsmap->allow_referent_inodes()) { - dout(10) << __func__ << " lookout-2 - Adding dentry as remote for journal when referent inode feature is enabled !!! " - << " dentry " << *dn << " first " << oldfirst << " last " << follows << dendl; - } + ceph_assert(dnl->is_remote()); + //No need to journal referent inode for cow CDentry *olddn = dir->add_remote_dentry(dn->get_name(), nullptr, dnl->get_remote_ino(), dnl->get_remote_d_type(), dn->alternate_name, oldfirst, follows); dout(10) << " olddn " << *olddn << dendl; @@ -8615,7 +8601,7 @@ int MDCache::path_traverse(const MDRequestRef& mdr, MDSContextFactory& cf, // do we have inode? CInode *in = dnl->get_inode(); if (!in) { - ceph_assert(dnl->is_remote() || dnl->is_referent_remote()); + ceph_assert(dnl->is_remote()); // do i have it? in = get_inode(dnl->get_remote_ino()); if (in) { @@ -8904,19 +8890,11 @@ CInode *MDCache::get_dentry_inode(CDentry *dn, const MDRequestRef& mdr, bool pro if (dnl->is_primary()) return dnl->inode; - ceph_assert(dnl->is_remote() || dnl->is_referent_remote()); + ceph_assert(dnl->is_remote()); CInode *in = get_inode(dnl->get_remote_ino()); if (in) { - CInode *ref_in = dnl->get_referent_inode(); - if (dnl->is_referent_remote()) - ceph_assert(ref_in); - if (ref_in) { - dout(7) << __func__ << " linking in referent remote in " << *in << "referent " << *ref_in << dendl; - dn->link_remote(dnl, in, ref_in); - } else { - dout(7) << __func__ << " linking in remote in " << *in << dendl; - dn->link_remote(dnl, in); - } + dout(7) << "get_dentry_inode linking in remote in " << *in << dendl; + dn->link_remote(dnl, in); return in; } else { dout(10) << "get_dentry_inode on remote dn, opening inode for " << *dn << dendl; @@ -8955,7 +8933,7 @@ void MDCache::_open_remote_dentry_finish(CDentry *dn, inodeno_t ino, MDSContext { if (r < 0) { CDentry::linkage_t *dnl = dn->get_projected_linkage(); - if ((dnl->is_remote() || dnl->is_referent_remote()) && dnl->get_remote_ino() == ino) { + if (dnl->is_remote() && dnl->get_remote_ino() == ino) { dout(0) << "open_remote_dentry_finish bad remote dentry " << *dn << dendl; dn->state_set(CDentry::STATE_BADREMOTEINO); @@ -13534,7 +13512,7 @@ void MDCache::repair_dirfrag_stats_work(const MDRequestRef& mdr) frag_info.nsubdirs++; else frag_info.nfiles++; - } else if (dnl->is_remote() || dnl->is_referent_remote()) + } else if (dnl->is_remote()) frag_info.nfiles++; } diff --git a/src/mds/Migrator.cc b/src/mds/Migrator.cc index 1e08a6d419b..f8edcb72de5 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -936,7 +936,7 @@ void Migrator::maybe_split_export(CDir* dir, uint64_t max_size, bool null_okay, dirfrag_size += null_size; continue; } - if (dn->get_linkage()->is_remote() || dn->get_linkage()->is_referent_remote()) { + if (dn->get_linkage()->is_remote()) { dirfrag_size += remote_size; continue; } diff --git a/src/mds/ScrubStack.cc b/src/mds/ScrubStack.cc index 61cf447c720..6b6ae7e0575 100644 --- a/src/mds/ScrubStack.cc +++ b/src/mds/ScrubStack.cc @@ -529,7 +529,7 @@ void ScrubStack::scrub_dirfrag(CDir *dir, bool *done) } if (dnl->is_primary()) { _enqueue(dnl->get_inode(), header, false); - } else if (dnl->is_remote() || dnl->is_referent_remote()) { + } else if (dnl->is_remote()) { // TODO: check remote linkage } } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 103c3dd6839..0f620c6ccea 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2436,7 +2436,7 @@ void Server::reply_client_request(const MDRequestRef& mdr, const ref_tget_projected_linkage()->is_remote() || tracedn->get_projected_linkage()->is_referent_remote())) { + tracedn->get_projected_linkage()->is_remote()) { mdcache->eval_remote(tracedn); } } @@ -12169,7 +12169,7 @@ bool Server::build_snap_diff( // remote link? // better for the MDS to do the work, if we think the client will stat any of these files. - if ((dnl->is_remote() || dnl->is_referent_remote()) && !in) { + if (dnl->is_remote() && !in) { in = mdcache->get_inode(dnl->get_remote_ino()); dout(20) << __func__ << " remote in: " << *in << " ino " << std::hex << dnl->get_remote_ino() << std::dec << dendl; if (in) { -- 2.39.5