From f4c976afbdb3fadcdd50056a99d462b336ae6118 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 May 2008 07:31:37 -0700 Subject: [PATCH] mds: avoid file size probe when size >= max_size --- src/mds/Locker.cc | 3 ++- src/mds/MDCache.cc | 14 ++++++++++---- src/osdc/Filer.cc | 3 ++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 0a6381ab89b02..70d65d4a5078d 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -653,7 +653,8 @@ void Locker::revoke_stale_caps(Session *session) if (issued) { dout(10) << " revoking " << cap_string(issued) << " on " << *in << dendl; cap->revoke(); - in->state_set(CInode::STATE_NEEDSRECOVER); + if (in->inode.max_size > in->inode.size) + in->state_set(CInode::STATE_NEEDSRECOVER); if (!in->filelock.is_stable()) file_eval_gather(&in->filelock); if (in->is_auth()) { diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 089e4fdc2d07f..a77a1f1acd7ba 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -2833,11 +2833,17 @@ void MDCache::do_file_recover() !file_recover_queue.empty()) { CInode *in = *file_recover_queue.begin(); file_recover_queue.erase(in); - file_recovering.insert(in); - dout(10) << "do_file_recover " << *in << dendl; - mds->filer->probe(in->inode, in->inode.max_size, &in->inode.size, false, - 0, new C_MDC_Recover(this, in)); + if (in->inode.max_size > in->inode.size) { + dout(10) << "do_file_recover starting " << in->inode.size << "/" << in->inode.max_size + << " " << *in << dendl; + file_recovering.insert(in); + mds->filer->probe(in->inode, in->inode.max_size, &in->inode.size, false, + 0, new C_MDC_Recover(this, in)); + } else { + dout(10) << "do_file_recover skipping " << in->inode.size << "/" << in->inode.max_size + << " " << *in << dendl; + } } } diff --git a/src/osdc/Filer.cc b/src/osdc/Filer.cc index cb519d78412b2..341e4a9101242 100644 --- a/src/osdc/Filer.cc +++ b/src/osdc/Filer.cc @@ -49,7 +49,7 @@ public: int Filer::probe(inode_t& inode, __u64 start_from, - __u64 *end, + __u64 *end, // LB, when !fwd bool fwd, int flags, Context *onfinish) @@ -70,6 +70,7 @@ int Filer::probe(inode_t& inode, if (probe->fwd) probe->probing_len += period - (start_from % period); } else { + assert(start_from > *end); if (probe->fwd) probe->probing_len = start_from % period; probe->from -= probe->probing_len; -- 2.39.5