From fca346d29fca4470290f8419214c4908e6a242b1 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Mon, 29 Apr 2024 10:51:39 -0400 Subject: [PATCH] mds: set/test ALL_LOCKED on fragment_dir request This is an optimization to obviate repeated calls to acquire_locks. Signed-off-by: Patrick Donnelly --- src/mds/MDCache.cc | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index a092854d22b02..c818a6071e02d 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -12086,15 +12086,20 @@ void MDCache::dispatch_fragment_dir(const MDRequestRef& mdr) if (mdr->more()->peer_error) mdr->aborted = true; - if (!mdr->aborted) { - MutationImpl::LockOpVec lov; - lov.add_wrlock(&diri->dirfragtreelock); - // prevent a racing gather on any other scatterlocks too - lov.lock_scatter_gather(&diri->nestlock); - lov.lock_scatter_gather(&diri->filelock); - if (!mds->locker->acquire_locks(mdr, lov, NULL, {}, true)) { - if (!mdr->aborted) - return; + if (!(mdr->locking_state & MutationImpl::ALL_LOCKED)) { + if (!mdr->aborted) { + MutationImpl::LockOpVec lov; + lov.add_wrlock(&diri->dirfragtreelock); + // prevent a racing gather on any other scatterlocks too + lov.lock_scatter_gather(&diri->nestlock); + lov.lock_scatter_gather(&diri->filelock); + if (mds->locker->acquire_locks(mdr, lov, NULL, {}, true)) { + mdr->locking_state |= MutationImpl::ALL_LOCKED; + } else { + if (!mdr->aborted) { + return; + } + } } } -- 2.39.5