]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: avoid file size probe when size >= max_size
authorSage Weil <sage@newdream.net>
Mon, 26 May 2008 14:31:37 +0000 (07:31 -0700)
committerSage Weil <sage@newdream.net>
Mon, 26 May 2008 14:31:37 +0000 (07:31 -0700)
src/mds/Locker.cc
src/mds/MDCache.cc
src/osdc/Filer.cc

index 0a6381ab89b02636898dfde961e71ad0c5080254..70d65d4a5078db642238bab4a0b7a8d7fe0a0b61 100644 (file)
@@ -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()) {
index 089e4fdc2d07f27e3353345bade4fc8aa11273c8..a77a1f1acd7ba0b05a73ac612c16d63777f59c1a 100644 (file)
@@ -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;
+    }
   }
 }
 
index cb519d78412b28672d3799e623ebd495ae0f53ee..341e4a9101242b84dc76a13131f536391e631752 100644 (file)
@@ -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;