From: Xiubo Li Date: Tue, 12 Sep 2023 02:24:59 +0000 (+0800) Subject: Revert "mds: clear the STATE_UNLINKING state when the unlink fails" X-Git-Tag: v16.2.15~144^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fd8f7c0d1a372f3530bd2a2922f7b077bd6b52ec;p=ceph.git Revert "mds: clear the STATE_UNLINKING state when the unlink fails" This reverts commit 417f24782cfcf45827dff74adf8df2283b2a2c72. Fixes: https://tracker.ceph.com/issues/61818 Signed-off-by: Xiubo Li (cherry picked from commit 4ec2b03f45f56718a593c834dd67ab2043a758bc) --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 0acfb60060c1..cfd43f350a47 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -6742,7 +6742,6 @@ bool Server::is_unlink_pending(CDentry *dn) void Server::wait_for_pending_unlink(CDentry *dn, MDRequestRef& mdr) { - dout(20) << __func__ << " dn " << *dn << dendl; mds->locker->drop_locks(mdr.get()); auto fin = new C_MDS_RetryRequest(mdcache, mdr); dn->get(CDentry::PIN_PURGING); @@ -7837,13 +7836,11 @@ void Server::handle_client_unlink(MDRequestRef& mdr) if (rmdir) { // do empty directory checks if (_dir_is_nonempty_unlocked(mdr, in)) { - dn->state_clear(CDentry::STATE_UNLINKING); - respond_to_request(mdr, -CEPHFS_ENOTEMPTY); + respond_to_request(mdr, -CEPHFS_ENOTEMPTY); return; } } else { dout(7) << "handle_client_unlink on dir " << *in << ", returning error" << dendl; - dn->state_clear(CDentry::STATE_UNLINKING); respond_to_request(mdr, -CEPHFS_EISDIR); return; } @@ -7851,7 +7848,6 @@ void Server::handle_client_unlink(MDRequestRef& mdr) if (rmdir) { // unlink dout(7) << "handle_client_rmdir on non-dir " << *in << ", returning error" << dendl; - dn->state_clear(CDentry::STATE_UNLINKING); respond_to_request(mdr, -CEPHFS_ENOTDIR); return; } @@ -7859,10 +7855,8 @@ void Server::handle_client_unlink(MDRequestRef& mdr) CInode *diri = dn->get_dir()->get_inode(); if ((!mdr->has_more() || mdr->more()->witnessed.empty())) { - if (!check_access(mdr, diri, MAY_WRITE)) { - dn->state_clear(CDentry::STATE_UNLINKING); + if (!check_access(mdr, diri, MAY_WRITE)) return; - } } // -- create stray dentry? -- @@ -7901,7 +7895,6 @@ void Server::handle_client_unlink(MDRequestRef& mdr) if (in->is_dir() && _dir_is_nonempty(mdr, in)) { respond_to_request(mdr, -CEPHFS_ENOTEMPTY); - dn->state_clear(CDentry::STATE_UNLINKING); return; }