From 0cf1c7ad8adc3b30aa1123c5444974f7257460d1 Mon Sep 17 00:00:00 2001 From: John Spray Date: Fri, 20 Mar 2015 21:09:43 +0000 Subject: [PATCH] mds: be fairer in enqueuing purges Don't let purges that require fewer ops skip ahead of those that require more ops. Signed-off-by: John Spray --- src/mds/StrayManager.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mds/StrayManager.cc b/src/mds/StrayManager.cc index c9423673ddc3..be702aca6f4e 100644 --- a/src/mds/StrayManager.cc +++ b/src/mds/StrayManager.cc @@ -330,11 +330,16 @@ void StrayManager::enqueue(CDentry *dn, bool trunc) } } - - // Try to purge immediately if possible, else enqueue const uint32_t ops_required = _calculate_ops_required(in, trunc); - bool consumed = _consume(dn, trunc, ops_required); + // Try to purge immediately if there is nothing in the queue, otherwise + // we will go to the back of the queue (even if there is allowance available + // to run us immediately) in order to be fair to others. + bool consumed = false; + if (ready_for_purge.empty()) { + consumed = _consume(dn, trunc, ops_required); + } + if (consumed) { dout(10) << __func__ << ": purging this dentry immediately: " << *dn << dendl; -- 2.47.3