From: Venky Shankar Date: Tue, 18 Mar 2025 09:02:20 +0000 (+0000) Subject: Revert "mds: Handle referent remote similar to remote" X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9e83e1c92dea78b86d675483a149b679fa0ab6fe;p=ceph.git Revert "mds: Handle referent remote similar to remote" This reverts commit 1e5fca1582295c9c89ee4afc1d0406cf17940704. Signed-off-by: Venky Shankar --- diff --git a/src/mds/CDentry.cc b/src/mds/CDentry.cc index 13a93f236651..5f258fa62acd 100644 --- a/src/mds/CDentry.cc +++ b/src/mds/CDentry.cc @@ -583,7 +583,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 ebd31703837d..0d27911dda27 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -258,7 +258,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++; } @@ -351,7 +351,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(); @@ -1019,7 +1019,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 @@ -3500,7 +3500,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 7d118905531f..74ca3a4fabf6 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -1705,14 +1705,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()); @@ -1798,15 +1791,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; @@ -8656,7 +8642,7 @@ int MDCache::path_traverse(const MDRequestRef& mdr, MDSContextFactory& cf, // do we have the inode? CInode *in = dnl->get_inode(); if (!in) { - ceph_assert(dnl->is_remote() || dnl->is_referent_remote()); + ceph_assert(dnl->is_remote()); // do we have it? in = get_inode(dnl->get_remote_ino()); if (in) { @@ -8945,19 +8931,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; @@ -8996,7 +8974,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); @@ -13593,7 +13571,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 b461e37817b9..7ed87d42e231 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -1054,7 +1054,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 efe0d3ed0425..706473e7536c 100644 --- a/src/mds/ScrubStack.cc +++ b/src/mds/ScrubStack.cc @@ -540,9 +540,8 @@ void ScrubStack::scrub_dirfrag(CDir *dir, bool *added_children, bool *done) continue; } if (dnl->is_primary()) { - *added_children = true; - _enqueue(dnl->get_inode(), header, true); - } else if (dnl->is_remote() || dnl->is_referent_remote()) { + _enqueue(dnl->get_inode(), header, false); + } else if (dnl->is_remote()) { identify_remote_link_damage(dn); } } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 24da45782e29..e0c3de3b5034 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2465,7 +2465,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); } } @@ -12363,7 +12363,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) {