From fd2b7c7165b4a72a0ffa056ae150719fe3e9bb7c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 18 Dec 2008 12:12:23 -0800 Subject: [PATCH] mds: check_inode_max_size only change filelock state if needed Don't try to change lock state unless we actually have something to update. --- src/mds/Locker.cc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 3b546131172..802a03c157a 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -874,17 +874,6 @@ public: bool Locker::check_inode_max_size(CInode *in, bool forceupdate, __u64 new_size) { assert(in->is_auth()); - if (!forceupdate && !in->filelock.can_wrlock()) { - // lock? - if (in->filelock.is_stable()) - file_lock(&in->filelock); - if (!in->filelock.can_wrlock()) { - // try again later - in->filelock.add_waiter(SimpleLock::WAIT_STABLE, new C_MDL_CheckMaxSize(this, in)); - dout(10) << "check_inode_max_size can't wrlock, waiting on " << *in << dendl; - return false; - } - } inode_t *latest = in->get_projected_inode(); uint64_t new_max = latest->max_size; @@ -903,6 +892,18 @@ bool Locker::check_inode_max_size(CInode *in, bool forceupdate, __u64 new_size) dout(10) << "check_inode_max_size " << latest->max_size << " -> " << new_max << " on " << *in << dendl; + if (!forceupdate && !in->filelock.can_wrlock()) { + // lock? + if (in->filelock.is_stable()) + file_lock(&in->filelock); + if (!in->filelock.can_wrlock()) { + // try again later + in->filelock.add_waiter(SimpleLock::WAIT_STABLE, new C_MDL_CheckMaxSize(this, in)); + dout(10) << "check_inode_max_size can't wrlock, waiting on " << *in << dendl; + return false; + } + } + Mutation *mut = new Mutation; mut->ls = mds->mdlog->get_current_segment(); -- 2.47.3