From: Sage Weil Date: Thu, 14 Aug 2014 22:06:47 +0000 (-0700) Subject: mds/Locker: prioritize file recovery on rd/wr/x lock X-Git-Tag: v0.86~170^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0fcdc6bd6fb81a21c2dceb33a9ddf2e88c73ec33;p=ceph.git 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 --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index eb4eccf5e5bc..c1d78d517140 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;