]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: journal recovered mtime; cleanup
authorSage Weil <sage@newdream.net>
Mon, 13 Jul 2009 20:13:37 +0000 (13:13 -0700)
committerSage Weil <sage@newdream.net>
Tue, 14 Jul 2009 00:48:19 +0000 (17:48 -0700)
Also avoid using in->inode as that may fail with concurrent updates
(if that's even possible?).

src/mds/Locker.cc
src/mds/Locker.h
src/mds/MDCache.cc
src/mds/MDCache.h

index 02b9c9845a67f912a9b3f26c549c463cdcfc3570..439a0a4274b339675ad8518e09be0ad536b153a1 100644 (file)
@@ -1404,7 +1404,8 @@ public:
 };
 
 
-bool Locker::check_inode_max_size(CInode *in, bool force_wrlock, bool update_size, __u64 new_size)
+bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
+                                 bool update_size, __u64 new_size, utime_t new_mtime)
 {
   assert(in->is_auth());
 
@@ -1468,6 +1469,8 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock, bool update_siz
     dout(10) << "check_inode_max_size size " << pi->size << " -> " << new_size << dendl;
     pi->size = new_size;
     pi->rstat.rbytes = new_size;
+    dout(10) << "check_inode_max_size mtime " << pi->mtime << " -> " << new_mtime << dendl;
+    pi->mtime = new_mtime;
   }
 
   // use EOpen if the file is still open; otherwise, use EUpdate.
index 06f84f14e81c6df1603adfdc77bbe7229892fe3b..a836984d21c0d1a2a531a26dfcb3fe5a2625adc3 100644 (file)
@@ -223,7 +223,8 @@ protected:
   void file_update_finish(CInode *in, Mutation *mut, bool share, int client, Capability *cap,
                          MClientCaps *ack);
 public:
-  bool check_inode_max_size(CInode *in, bool force_wrlock=false, bool update_size=false, __u64 newsize=0);
+  bool check_inode_max_size(CInode *in, bool force_wrlock=false, bool update_size=false, __u64 newsize=0,
+                           utime_t mtime=utime_t());
 private:
   void share_inode_max_size(CInode *in);
 
index 09bfa630b9eb5210ce035320ffaebfb4518ec38b..c1966594f2a8e282bc24930af84425032a4d797c 100644 (file)
@@ -4332,9 +4332,11 @@ void MDCache::identify_files_to_recover()
 struct C_MDC_Recover : public Context {
   MDCache *mdc;
   CInode *in;
-  C_MDC_Recover(MDCache *m, CInode *i) : mdc(m), in(i) {}
+  __u64 size;
+  utime_t mtime;
+  C_MDC_Recover(MDCache *m, CInode *i) : mdc(m), in(i), size(0) {}
   void finish(int r) {
-    mdc->_recovered(in, r);
+    mdc->_recovered(in, r, size, mtime);
   }
 };
 
@@ -4353,11 +4355,10 @@ void MDCache::do_file_recover()
               << " " << *in << dendl;
       file_recovering.insert(in);
       
-      __u64 max = in->inode.get_max_size();
-
+      C_MDC_Recover *fin = new C_MDC_Recover(this, in);
       mds->filer->probe(in->inode.ino, &in->inode.layout, in->last,
-                       max, &in->inode.size, &in->inode.mtime, false,
-                       0, new C_MDC_Recover(this, in));    
+                       in->get_projected_inode()->get_max_size(), &fin->size, &fin->mtime, false,
+                       0, fin);    
     } else {
       dout(10) << "do_file_recover skipping " << in->inode.size
               << " " << *in << dendl;
@@ -4371,7 +4372,7 @@ void MDCache::do_file_recover()
   }
 }
 
-void MDCache::_recovered(CInode *in, int r)
+void MDCache::_recovered(CInode *in, int r, __u64 size, utime_t mtime)
 {
   dout(10) << "_recovered r=" << r << " size=" << in->inode.size << " mtime=" << in->inode.mtime
           << " for " << *in << dendl;
@@ -4385,7 +4386,7 @@ void MDCache::_recovered(CInode *in, int r)
     remove_inode(in);
   } else {
     // journal
-    mds->locker->check_inode_max_size(in, true, true, in->inode.size);
+    mds->locker->check_inode_max_size(in, true, true, size, mtime);
     in->auth_unpin(this);
   }
 
index 0e72a1209914b128338b286b0451c7c1650bdd76..1ad4aead0f60159161956f2b9291c7d0b66fb562 100644 (file)
@@ -775,7 +775,7 @@ public:
   void _queue_file_recover(CInode *in);
   void identify_files_to_recover();
   void do_file_recover();
-  void _recovered(CInode *in, int r);
+  void _recovered(CInode *in, int r, __u64 size, utime_t mtime);
 
   void purge_prealloc_ino(inodeno_t ino, Context *fin);