]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
MDS: switch cache object classes to use MutationRef instead of raw pointers
authorGreg Farnum <greg@inktank.com>
Wed, 12 Mar 2014 16:42:45 +0000 (09:42 -0700)
committerGreg Farnum <greg@inktank.com>
Tue, 8 Apr 2014 00:00:17 +0000 (17:00 -0700)
Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/CDentry.h
src/mds/CDir.cc
src/mds/CDir.h
src/mds/CInode.cc
src/mds/CInode.h

index 39a4c55380bdbd8a3bd4580a08ae3ed1767b57e8..41ed83d600a2f7f14d59ec9c12e4544939b7c44a 100644 (file)
@@ -242,11 +242,11 @@ public:
     return get_projected_linkage()->inode;
   }
 
-  bool use_projected(client_t client, Mutation *mut) {
+  bool use_projected(client_t client, const MutationRef& mut) const {
     return lock.can_read_projected(client) || 
       lock.get_xlock_by() == mut;
   }
-  linkage_t *get_linkage(client_t client, Mutation *mut) {
+  linkage_t *get_linkage(client_t client, const MutationRef& mut) {
     return use_projected(client, mut) ? get_projected_linkage() : get_linkage();
   }
 
index 35573b656896b6282d452351ef83dc72dea7d8bd..b89ac08e7461ef312fca23216eed6b0daf4284e2 100644 (file)
@@ -1050,7 +1050,7 @@ void CDir::assimilate_dirty_rstat_inodes()
   dout(10) << "assimilate_dirty_rstat_inodes done" << dendl;
 }
 
-void CDir::assimilate_dirty_rstat_inodes_finish(Mutation *mut, EMetaBlob *blob)
+void CDir::assimilate_dirty_rstat_inodes_finish(MutationRef& mut, EMetaBlob *blob)
 {
   if (!state_test(STATE_ASSIMRSTAT))
     return;
index dc1037a2b82fafe85841870cf0b760f568b0e206..5ef2d65372c5a8c33d0de9cc176d549e241968fc 100644 (file)
@@ -179,7 +179,7 @@ public:
   void resync_accounted_fragstat();
   void resync_accounted_rstat();
   void assimilate_dirty_rstat_inodes();
-  void assimilate_dirty_rstat_inodes_finish(Mutation *mut, EMetaBlob *blob);
+  void assimilate_dirty_rstat_inodes_finish(MutationRef& mut, EMetaBlob *blob);
 
 protected:
   version_t projected_version;
index e475dfb2a17674f574f4c53205441f0f1f3dd1fa..f8a25d592adea685ea70ae91a2d61c07e8cc3e80 100644 (file)
@@ -1678,9 +1678,9 @@ void CInode::start_scatter(ScatterLock *lock)
 struct C_Inode_FragUpdate : public Context {
   CInode *in;
   CDir *dir;
-  Mutation *mut;
+  MutationRef mut;
 
-  C_Inode_FragUpdate(CInode *i, CDir *d, Mutation *m) : in(i), dir(d), mut(m) {}
+  C_Inode_FragUpdate(CInode *i, CDir *d, MutationRef& m) : in(i), dir(d), mut(m) {}
   void finish(int r) {
     in->_finish_frag_update(dir, mut);
   }    
@@ -1701,7 +1701,7 @@ void CInode::finish_scatter_update(ScatterLock *lock, CDir *dir,
       dout(10) << "finish_scatter_update " << fg << " journaling accounted scatterstat update v" << inode_version << dendl;
 
       MDLog *mdlog = mdcache->mds->mdlog;
-      Mutation *mut = new Mutation;
+      MutationRef mut(new MutationImpl);
       mut->ls = mdlog->get_current_segment();
 
       inode_t *pi = get_projected_inode();
@@ -1742,12 +1742,11 @@ void CInode::finish_scatter_update(ScatterLock *lock, CDir *dir,
   }
 }
 
-void CInode::_finish_frag_update(CDir *dir, Mutation *mut)
+void CInode::_finish_frag_update(CDir *dir, MutationRef& mut)
 {
   dout(10) << "_finish_frag_update on " << *dir << dendl;
   mut->apply();
   mut->cleanup();
-  delete mut;
 }
 
 
@@ -1952,7 +1951,7 @@ void CInode::finish_scatter_gather_update(int type)
   }
 }
 
-void CInode::finish_scatter_gather_update_accounted(int type, Mutation *mut, EMetaBlob *metablob)
+void CInode::finish_scatter_gather_update_accounted(int type, MutationRef& mut, EMetaBlob *metablob)
 {
   dout(10) << "finish_scatter_gather_update_accounted " << type << " on " << *this << dendl;
   assert(is_auth());
index efc9825aa353ffc959fd8048fe636ca8f496d939..cb1add372ecf54fb347815c9bc7681b129c343b1 100644 (file)
@@ -663,7 +663,7 @@ public:
   void encode_lock_state(int type, bufferlist& bl);
   void decode_lock_state(int type, bufferlist& bl);
 
-  void _finish_frag_update(CDir *dir, Mutation *mut);
+  void _finish_frag_update(CDir *dir, MutationRef& mut);
 
   void clear_dirty_scattered(int type);
   bool is_dirty_scattered();
@@ -673,7 +673,7 @@ public:
   void finish_scatter_update(ScatterLock *lock, CDir *dir,
                             version_t inode_version, version_t dir_accounted_version);
   void finish_scatter_gather_update(int type);
-  void finish_scatter_gather_update_accounted(int type, Mutation *mut, EMetaBlob *metablob);
+  void finish_scatter_gather_update_accounted(int type, MutationRef& mut, EMetaBlob *metablob);
 
   // -- snap --
   void open_snaprealm(bool no_split=false);