From cc398ccfa78f584069474d66727bcb7f4dbce9ff Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 9 Jun 2011 12:52:22 -0700 Subject: [PATCH] mds: efficiently issue_caps for scatterlocks unlock during refragment Signed-off-by: Sage Weil --- src/mds/MDCache.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index e1f143ef1f4..00e0e7c1f5a 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -9683,9 +9683,10 @@ void MDCache::fragment_logged_and_stored(Mutation *mut, list& resultfrags delete mut; // drop dft wrlock - mds->locker->wrlock_finish(&diri->dirfragtreelock, NULL); - mds->locker->wrlock_finish(&diri->nestlock, NULL); - mds->locker->wrlock_finish(&diri->filelock, NULL); + bool need_issue = false; + mds->locker->wrlock_finish(&diri->dirfragtreelock, NULL, &need_issue); + mds->locker->wrlock_finish(&diri->nestlock, NULL, &need_issue); + mds->locker->wrlock_finish(&diri->filelock, NULL, &need_issue); // unfreeze resulting frags for (list::iterator p = resultfrags.begin(); @@ -9708,6 +9709,9 @@ void MDCache::fragment_logged_and_stored(Mutation *mut, list& resultfrags dir->unfreeze_dir(); } + + if (need_issue) + mds->locker->issue_caps(diri); }