From: Venky Shankar Date: Tue, 18 Mar 2025 09:07:18 +0000 (+0000) Subject: Revert "mds/journal: Journal referent remote dentry" X-Git-Tag: testing/wip-vshankar-testing-20260223.155722^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8d117fe76aa8211364652604158e17a614018c0;p=ceph-ci.git Revert "mds/journal: Journal referent remote dentry" This reverts commit 1cce52fd0d88586d0b6368000c6e093ea2b3feb5. Signed-off-by: Venky Shankar --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index d1e334e7de9..0c1c3e24c89 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -617,10 +617,8 @@ void MDCache::_create_system_file(CDir *dir, std::string_view name, CInode *in, } else { predirty_journal_parents(mut, &le->metablob, in, dir, PREDIRTY_DIR, 1); journal_dirty_inode(mut.get(), &le->metablob, in); - //TODO: A referent inode for system file ?? dn->push_projected_linkage(in->ino(), in->d_type()); - dout(10) << __func__ << " add remote dentry " << *dn << dendl; - le->metablob.add_remote_dentry(dn, true, in->ino(), in->d_type(), 0, nullptr); + le->metablob.add_remote_dentry(dn, true, in->ino(), in->d_type()); le->metablob.add_root(true, in); } if (mdir) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 6c886a73d2f..8846301a34f 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -7922,8 +7922,7 @@ void Server::_link_local(const MDRequestRef& mdr, CDentry *dn, CInode *targeti, le->metablob.add_client_req(mdr->reqid, mdr->client_request->get_oldest_client_tid()); mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1); // new dn mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, 0, PREDIRTY_PRIMARY); // targeti - // 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 + le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type()); // new remote mdcache->journal_dirty_inode(mdr.get(), &le->metablob, targeti); // do this after predirty_*, to avoid funky extra dnl arg @@ -8041,8 +8040,7 @@ void Server::_link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode if (inc) { dn->pre_dirty(); mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1); - // 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 + le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type()); // new remote dn->push_projected_linkage(targeti->ino(), targeti->d_type()); } else { dn->pre_dirty(); @@ -10069,8 +10067,7 @@ void Server::_rename_prepare(const MDRequestRef& mdr, destdn->first = mdcache->get_global_snaprealm()->get_newest_seq() + 1; if (destdn->is_auth()) - // TODO: Pass referent inode upon creation. It's adding just remote dentry now - metablob->add_remote_dentry(destdn, true, srcdnl->get_remote_ino(), srcdnl->get_remote_d_type(), 0, nullptr); + metablob->add_remote_dentry(destdn, true, srcdnl->get_remote_ino(), srcdnl->get_remote_d_type()); if (srci->is_auth() ) { // it's remote if (mdr->peer_request) { diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index b453e108c66..3e3611ab561 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -149,24 +149,18 @@ public: version_t dnv = 0; inodeno_t ino = 0; unsigned char d_type = '\0'; - inodeno_t referent_ino = 0; - CInode::inode_const_ptr referent_inode; // if it's not XXX should not be part of mempool; wait for std::pmr to simplify bool dirty = false; remotebit(std::string_view d, std::string_view an, snapid_t df, snapid_t dl, version_t v, inodeno_t i, unsigned char dt, bool dr) : dn(d), alternate_name(an), dnfirst(df), dnlast(dl), dnv(v), ino(i), d_type(dt), dirty(dr) { } - remotebit(std::string_view d, std::string_view an, snapid_t df, snapid_t dl, version_t v, inodeno_t i, unsigned char dt, inodeno_t ref_ino, const CInode::inode_const_ptr& ref_inode, bool dr) : - dn(d), alternate_name(an), dnfirst(df), dnlast(dl), dnv(v), ino(i), d_type(dt), referent_ino(ref_ino), referent_inode(ref_inode), dirty(dr) {} explicit remotebit(bufferlist::const_iterator &p) { decode(p); } remotebit() = default; - void encode(bufferlist& bl, uint64_t features) const; + void encode(bufferlist& bl) const; void decode(bufferlist::const_iterator &bl); void print(std::ostream& out) const { out << " remotebit dn " << dn << " [" << dnfirst << "," << dnlast << "] dnv " << dnv << " ino " << ino - << " referent ino " << referent_ino - << " referent inode " << referent_inode << " dirty=" << dirty; if (!alternate_name.empty()) { out << " altn " << binstrprint(alternate_name, 8); @@ -176,7 +170,7 @@ public: void dump(Formatter *f) const; static std::list generate_test_instances(); }; - WRITE_CLASS_ENCODER_FEATURES(remotebit) + WRITE_CLASS_ENCODER(remotebit) /* * nullbit - a null dentry @@ -296,7 +290,7 @@ public: using ceph::encode; if (!dn_decoded) return; encode(dfull, dnbl, features); - encode(dremote, dnbl, features); + encode(dremote, dnbl); encode(dnull, dnbl); } void _decode_bits() const { @@ -433,37 +427,21 @@ private: } void add_remote_dentry(CDentry *dn, bool dirty) { - add_remote_dentry(add_dir(dn->get_dir(), false), dn, dirty, 0, 0, 0, nullptr); + add_remote_dentry(add_dir(dn->get_dir(), false), dn, dirty, 0, 0); } - void add_remote_dentry(CDentry *dn, bool dirty, inodeno_t rino, int rdt, inodeno_t referent_ino, CInode *ref_in) { - add_remote_dentry(add_dir(dn->get_dir(), false), dn, dirty, rino, rdt, referent_ino, ref_in); + void add_remote_dentry(CDentry *dn, bool dirty, inodeno_t rino, int rdt) { + add_remote_dentry(add_dir(dn->get_dir(), false), dn, dirty, rino, rdt); } void add_remote_dentry(dirlump& lump, CDentry *dn, bool dirty, - inodeno_t rino=0, unsigned char rdt=0, inodeno_t referent_ino=0, CInode *ref_in=nullptr) { + inodeno_t rino=0, unsigned char rdt=0) { dn->check_corruption(false); - /* In multi-version inode, i.e., a file has hardlinks and the primary link is being deleted, - * the primary inode is added as remote in the journal. In this case, it will not have a - * referent inode. So referent_ino=0 and ref_in=nullptr. - */ if (!rino) { rino = dn->get_projected_linkage()->get_remote_ino(); rdt = dn->get_projected_linkage()->get_remote_d_type(); - referent_ino = dn->get_projected_linkage()->get_referent_ino(); - ref_in = dn->get_projected_linkage()->get_referent_inode(); } - lump.nremote++; - if (ref_in) { - ceph_assert(referent_ino > 0); - const auto& ref_pi = ref_in->get_projected_inode(); - ceph_assert(ref_pi->version > 0); - lump.add_dremote(dn->get_name(), dn->get_alternate_name(), dn->first, dn->last, - dn->get_projected_version(), rino, rdt, referent_ino, ref_pi, dirty); - } else { - ceph_assert(referent_ino == 0); - lump.add_dremote(dn->get_name(), dn->get_alternate_name(), dn->first, dn->last, - dn->get_projected_version(), rino, rdt, dirty); - } + lump.add_dremote(dn->get_name(), dn->get_alternate_name(), dn->first, dn->last, + dn->get_projected_version(), rino, rdt, dirty); } // return remote pointer to to-be-journaled inode @@ -526,8 +504,8 @@ private: add_dentry(lump, dn, dn->is_dirty(), dirty_parent, dirty_pool); } void add_dentry(dirlump& lump, CDentry *dn, bool dirty, bool dirty_parent, bool dirty_pool) { - // primary or remote or referent_remote - if (dn->get_projected_linkage()->is_remote() || dn->get_projected_linkage()->is_referent_remote()) { + // primary or remote + if (dn->get_projected_linkage()->is_remote()) { add_remote_dentry(dn, dirty); } else if (dn->get_projected_linkage()->is_null()) { add_null_dentry(dn, dirty); @@ -631,7 +609,7 @@ private: }; WRITE_CLASS_ENCODER_FEATURES(EMetaBlob) WRITE_CLASS_ENCODER_FEATURES(EMetaBlob::fullbit) -WRITE_CLASS_ENCODER_FEATURES(EMetaBlob::remotebit) +WRITE_CLASS_ENCODER(EMetaBlob::remotebit) WRITE_CLASS_ENCODER(EMetaBlob::nullbit) WRITE_CLASS_ENCODER_FEATURES(EMetaBlob::dirlump) diff --git a/src/mds/journal.cc b/src/mds/journal.cc index bb9a291487d..df8d86120d3 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -696,9 +696,10 @@ void EMetaBlob::fullbit::update_inode(MDSRank *mds, CInode *in) } // EMetaBlob::remotebit -void EMetaBlob::remotebit::encode(bufferlist& bl, uint64_t features) const + +void EMetaBlob::remotebit::encode(bufferlist& bl) const { - ENCODE_START(4, 2, bl); + ENCODE_START(3, 2, bl); encode(dn, bl); encode(std::tuple{ dnfirst, @@ -709,15 +710,12 @@ void EMetaBlob::remotebit::encode(bufferlist& bl, uint64_t features) const dirty, }, bl, 0); encode(alternate_name, bl); - encode(referent_ino, bl); - if (referent_ino) - encode(*referent_inode, bl, features); ENCODE_FINISH(bl); } void EMetaBlob::remotebit::decode(bufferlist::const_iterator &bl) { - DECODE_START_LEGACY_COMPAT_LEN(4, 2, 2, bl); + DECODE_START_LEGACY_COMPAT_LEN(3, 2, 2, bl); decode(dn, bl); decode(dnfirst, bl); decode(dnlast, bl); @@ -727,16 +725,6 @@ void EMetaBlob::remotebit::decode(bufferlist::const_iterator &bl) decode(dirty, bl); if (struct_v >= 3) decode(alternate_name, bl); - if (struct_v >= 4) { - decode(referent_ino, bl); - if (referent_ino) { - auto _inode = CInode::allocate_inode(); - decode(*_inode, bl); - referent_inode = std::move(_inode); - } else { - referent_inode = NULL; - } - } DECODE_FINISH(bl); } @@ -770,16 +758,14 @@ void EMetaBlob::remotebit::dump(Formatter *f) const f->dump_string("d_type", type_string); f->dump_string("dirty", dirty ? "true" : "false"); f->dump_string("alternate_name", alternate_name); - f->dump_int("referentino", referent_ino); } std::list EMetaBlob::remotebit::generate_test_instances() { std::list ls; - auto _inode = CInode::allocate_inode(); - auto remote = remotebit("/test/dn", "", 0, 10, 15, 1, IFTODT(S_IFREG), 2, _inode, false); + auto remote = remotebit("/test/dn", "", 0, 10, 15, 1, IFTODT(S_IFREG), false); ls.push_back(std::move(remote)); - remote = remotebit("/test/dn2", "foo", 0, 10, 15, 1, IFTODT(S_IFREG), 2, _inode, false); + remote = remotebit("/test/dn2", "foo", 0, 10, 15, 1, IFTODT(S_IFREG), false); ls.push_back(remote); return ls; } diff --git a/src/tools/ceph-dencoder/mds_types.h b/src/tools/ceph-dencoder/mds_types.h index 8cc39f34df9..1272017c438 100644 --- a/src/tools/ceph-dencoder/mds_types.h +++ b/src/tools/ceph-dencoder/mds_types.h @@ -96,7 +96,7 @@ TYPE_FEATUREFUL_NOCOPY(EImportStart) #include "mds/events/EMetaBlob.h" TYPE_FEATUREFUL_NOCOPY(EMetaBlob::fullbit) -TYPE_FEATUREFUL_NOCOPY(EMetaBlob::remotebit) +TYPE(EMetaBlob::remotebit) TYPE(EMetaBlob::nullbit) TYPE_FEATUREFUL_NOCOPY(EMetaBlob::dirlump) TYPE_FEATUREFUL_NOCOPY(EMetaBlob)