]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Revert "mds/journal: Journal referent remote dentry"
authorVenky Shankar <vshankar@redhat.com>
Tue, 18 Mar 2025 09:07:18 +0000 (09:07 +0000)
committerVenky Shankar <vshankar@redhat.com>
Thu, 12 Feb 2026 04:50:54 +0000 (10:20 +0530)
This reverts commit 1cce52fd0d88586d0b6368000c6e093ea2b3feb5.

Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/mds/MDCache.cc
src/mds/Server.cc
src/mds/events/EMetaBlob.h
src/mds/journal.cc
src/tools/ceph-dencoder/mds_types.h

index d1e334e7de9b3af592c9dffc164bdd3fbc791f49..0c1c3e24c89ea5c78f56e987c5b30a40c293ec57 100644 (file)
@@ -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)
index 6c886a73d2f8f572db97a5a09f77f9825f1aa885..8846301a34f85938b01efb3875afc69e3406e106 100644 (file)
@@ -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) {
index b453e108c6629bc17b44d5635625922b78a41048..3e3611ab561b1f800e052d8caf497091e325346d 100644 (file)
@@ -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<remotebit> 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)
 
index bb9a291487d0a5c5403c60df4ee979d78d212831..df8d86120d3cc16acd4d7048120f3911e5284185 100644 (file)
@@ -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> EMetaBlob::remotebit::generate_test_instances()
 {
   std::list<EMetaBlob::remotebit> 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;
 }
index 8cc39f34df994964a36f6a5cb092bc48e959d47f..1272017c438ebfea680bcd2aabc7714acb21485d 100644 (file)
@@ -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)