]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: don't clear `AUTHPIN_FROZEN` until `FROZEN` in rename_prep
authorLeonid Usov <leonid.usov@ibm.com>
Sun, 12 May 2024 00:36:32 +0000 (03:36 +0300)
committerLeonid Usov <leonid.usov@ibm.com>
Mon, 20 May 2024 21:10:19 +0000 (00:10 +0300)
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
src/mds/Server.cc

index e46f69b3297caf2ef74320a8b48d9438666144d8..8961e9b128af7a937b4fd0c2b04c6dfa3ef29f00 100644 (file)
@@ -10005,15 +10005,15 @@ void Server::handle_peer_rename_prep(const MDRequestRef& mdr)
       dout(10) << " freezing srci " << *srcdnl->get_inode() << " with allowance " << allowance << dendl;
       bool frozen_inode = srcdnl->get_inode()->freeze_inode(allowance);
 
-      // unfreeze auth pin after freezing the inode to avoid queueing waiters
-      if (srcdnl->get_inode()->is_frozen_auth_pin())
-       mdr->unfreeze_auth_pin();
-
       if (!frozen_inode) {
-       srcdnl->get_inode()->add_waiter(CInode::WAIT_FROZEN, new C_MDS_RetryRequest(mdcache, mdr));
-       return;
+        srcdnl->get_inode()->add_waiter(CInode::WAIT_FROZEN, new C_MDS_RetryRequest(mdcache, mdr));
+        return;
       }
 
+      // unfreeze auth pin after freezing the inode to avoid queueing waiters
+      if (srcdnl->get_inode()->is_frozen_auth_pin())
+        mdr->unfreeze_auth_pin();
+
       /*
        * set ambiguous auth for srci
        * NOTE: we don't worry about ambiguous cache expire as we do