From 0fcdc6bd6fb81a21c2dceb33a9ddf2e88c73ec33 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 14 Aug 2014 15:06:47 -0700 Subject: [PATCH] mds/Locker: prioritize file recovery on rd/wr/x lock If someone specifically touches the file lock, prioritize recovery for this file. Signed-off-by: Sage Weil --- src/mds/Locker.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index eb4eccf5e5b..c1d78d51714 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1184,6 +1184,13 @@ bool Locker::_rdlock_kick(SimpleLock *lock, bool as_anon) return false; } } + if (lock->get_type() == CEPH_LOCK_IFILE) { + CInode *in = static_cast(lock->get_parent()); + if (in->state_test(CInode::STATE_RECOVERING)) { + mds->mdcache->recovery_queue.prioritize(in); + } + } + return false; } @@ -1370,6 +1377,11 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequestRef& mut, bool nowait) return true; } + if (lock->get_type() == CEPH_LOCK_IFILE && + in->state_test(CInode::STATE_RECOVERING)) { + mds->mdcache->recovery_queue.prioritize(in); + } + if (!lock->is_stable()) break; @@ -1505,6 +1517,13 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequestRef& mut) return true; } + if (lock->get_type() == CEPH_LOCK_IFILE) { + CInode *in = static_cast(lock->get_parent()); + if (in->state_test(CInode::STATE_RECOVERING)) { + mds->mdcache->recovery_queue.prioritize(in); + } + } + if (!lock->is_stable() && !(lock->get_state() == LOCK_XLOCKDONE && lock->get_xlock_by_client() == client)) break; -- 2.47.3