]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Revert "mds/unlink: Remove referent inode on unlink"
authorVenky Shankar <vshankar@redhat.com>
Tue, 18 Mar 2025 08:58:23 +0000 (08:58 +0000)
committerVenky Shankar <vshankar@redhat.com>
Thu, 12 Feb 2026 04:50:54 +0000 (10:20 +0530)
This reverts commit bcf2e7d9a0f9ef9b20de85b95c23a9cbe57525ab.

Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/mds/Server.cc

index f5bca43c1c9e4f45036f206c31f83bd27bbf0592..7fe7c99c01622c97f672d86493224b9c0798fca6 100644 (file)
@@ -8614,11 +8614,6 @@ void Server::handle_client_unlink(const MDRequestRef& mdr)
     if (!straydn)
       return;
     dout(10) << " straydn is " << *straydn << dendl;
-  } else if (dnl->is_referent_remote()) {
-    straydn = prepare_stray_dentry(mdr, dnl->get_referent_inode());
-    if (!straydn)
-      return;
-    dout(10) << __func__ << " referent straydn is " << *straydn << dendl;
   } else if (mdr->straydn) {
     mdr->unpin(mdr->straydn);
     mdr->straydn = NULL;
@@ -8731,9 +8726,7 @@ void Server::_unlink_local(const MDRequestRef& mdr, CDentry *dn, CDentry *strayd
 
   CDentry::linkage_t *dnl = dn->get_projected_linkage();
   CInode *in = dnl->get_inode();
-  CInode *ref_in = dnl->get_referent_inode();
-  if (dnl->is_referent_remote())
-    ceph_assert(ref_in->is_auth());
+
 
   // ok, let's do it.
   mdr->ls = mdlog->get_current_segment();
@@ -8749,12 +8742,8 @@ void Server::_unlink_local(const MDRequestRef& mdr, CDentry *dn, CDentry *strayd
   }
 
   if (straydn) {
-    ceph_assert(dnl->is_primary() || dnl->is_referent_remote());
-    if (dnl->is_primary())
-      straydn->push_projected_linkage(in);
-    else if (dnl->is_referent_remote()) {
-      straydn->push_projected_linkage(ref_in);
-    }
+    ceph_assert(dnl->is_primary());
+    straydn->push_projected_linkage(in);
   }
 
   // the unlinked dentry
@@ -8786,33 +8775,11 @@ void Server::_unlink_local(const MDRequestRef& mdr, CDentry *dn, CDentry *strayd
     // will manually pop projected inode
 
     // primary link.  add stray dentry.
-    if (dnl->is_primary()) {
-      mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, -1);
-      mdcache->predirty_journal_parents(mdr, &le->metablob, in, straydn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
+    mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, -1);
+    mdcache->predirty_journal_parents(mdr, &le->metablob, in, straydn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
 
-      pi.inode->update_backtrace();
-      le->metablob.add_primary_dentry(straydn, in, true, true);
-    } else if (dnl->is_referent_remote()) {
-      // referent remote link - to purge the referent inode created
-      auto pri = ref_in->project_inode(mdr);
-      {
-        std::string t;
-        dn->make_path_string(t, true);
-        pri.inode->stray_prior_path = std::move(t);
-      }
-      pri.inode->version = ref_in->pre_dirty();
-      // Purge enqueue requires inode to be primary and nlink to be 0
-      // link count is never > 1 for referent inode, just set it to 0
-      pri.inode->nlink = 0;
-      ref_in->state_set(CInode::STATE_ORPHAN);
-      mdcache->predirty_journal_parents(mdr, &le->metablob, ref_in, straydn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
-      pri.inode->update_backtrace();
-      le->metablob.add_primary_dentry(straydn, ref_in, true, true);
-
-      mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_DIR, -1);
-      mdcache->predirty_journal_parents(mdr, &le->metablob, in, 0, PREDIRTY_PRIMARY);
-      mdcache->journal_dirty_inode(mdr.get(), &le->metablob, in);
-    }
+    pi.inode->update_backtrace();
+    le->metablob.add_primary_dentry(straydn, in, true, true);
   } else {
     // remote link.  update remote inode.
     mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_DIR, -1);
@@ -8857,14 +8824,9 @@ void Server::_unlink_local_finish(const MDRequestRef& mdr,
   if (straydn) {
     // if there is newly created snaprealm, need to split old snaprealm's
     // inodes_with_caps. So pop snaprealm before linkage changes.
-    if (dn->get_linkage()->is_primary()) {
-      strayin = dn->get_linkage()->get_inode();
-      hadrealm = strayin->snaprealm ? true : false;
-      strayin->early_pop_projected_snaprealm();
-    } else if (dn->get_linkage()->is_referent_remote()) {
-      // No snapshots on referent inodes - Ignore snaprealm related stuff for referent inodes
-      strayin = dn->get_linkage()->get_referent_inode();
-    }
+    strayin = dn->get_linkage()->get_inode();
+    hadrealm = strayin->snaprealm ? true : false;
+    strayin->early_pop_projected_snaprealm();
   }
 
   // unlink main dentry