]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Revert "mds: Fix straydn race between unlink/rename linkmerge"
authorVenky Shankar <vshankar@redhat.com>
Tue, 18 Mar 2025 08:57:18 +0000 (08:57 +0000)
committerVenky Shankar <vshankar@redhat.com>
Thu, 12 Feb 2026 04:50:54 +0000 (10:20 +0530)
This reverts commit f264f11f44d6355452dadc2a20efddc012c531e3.

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

index e34cd264148be8ff1d9e317b505134e343675f73..9f978a0a99356cee033b844a7955fdafec829f6e 100644 (file)
@@ -489,9 +489,6 @@ struct MDRequestImpl : public MutationImpl {
   // indicator for vxattr osdmap update
   bool waited_for_osdmap = false;
 
-  // referent straydn
-  bool referent_straydn = false;
-
 protected:
   void _dump(ceph::Formatter *f) const override {
     _dump(f, false);
index ea60c5030dfc0e8bff6c827b6566a80e76d5e6db..526f748c48f20a0152ef65e6a529d12148341811 100644 (file)
@@ -8682,37 +8682,14 @@ void Server::handle_client_unlink(const MDRequestRef& mdr)
   // -- create stray dentry? --
   CDentry *straydn = NULL;
   if (dnl->is_primary()) {
-    /* Handle race between unlink of secondary hardlink (say hl_file1) and
-     * linkmerge rename, triggered by unlink of primary (say file1) on to
-     * the same secondary hardlink (hl_file1).
-     *           1. unlink hl_file1
-     *           2. prepares straydn for referent inode
-     *           3. wait for the locks
-     *
-     *   unlink file1, triggers linkmerge rename
-     *   rename(hl_file1, primary_stray) ---> referent straydn converted to primary
-     *
-     *           4. On retry, it find itself as primary,
-     *              needs to prepare straydn for primary.
-     *              so clean up the earlier referent straydn
-     */
-    if (mdr->straydn && mdr->referent_straydn) {
-      dout(10) << __func__ << " race, clean up referent straydn " << *mdr->straydn << dendl;
-      mdr->unpin(mdr->straydn);
-      mdr->straydn = nullptr;
-    }
     straydn = prepare_stray_dentry(mdr, dnl->get_inode());
     if (!straydn)
       return;
-    mdr->referent_straydn = false;
     dout(10) << " straydn is " << *straydn << dendl;
   } else if (dnl->is_referent_remote()) {
-    // Above race is not applicable here since a referent can get converted
-    // to primary but not the otherway.
     straydn = prepare_stray_dentry(mdr, dnl->get_referent_inode());
     if (!straydn)
       return;
-    mdr->referent_straydn = true;
     dout(10) << __func__ << " referent straydn is " << *straydn << dendl;
   } else if (mdr->straydn) {
     mdr->unpin(mdr->straydn);
@@ -9577,13 +9554,11 @@ void Server::handle_client_rename(const MDRequestRef& mdr)
     straydn = prepare_stray_dentry(mdr, destdnl->get_inode());
     if (!straydn)
       return;
-    mdr->referent_straydn = false;
     dout(10) << " straydn is " << *straydn << dendl;
   } else if (destdnl->is_referent_remote()) { //both linkmerge and non linkmerge case
     straydn = prepare_stray_dentry(mdr, destdnl->get_referent_inode());
     if (!straydn)
       return;
-    mdr->referent_straydn = true;
     dout(10) << __func__ << (linkmerge ? " linkmerge:yes ": " linkmerge:no ")
              << " referent straydn is " << *straydn << dendl;
   } else if (mdr->straydn) {