]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: convert CapSnap::in to smart pointer
authorYan, Zheng <zyan@redhat.com>
Wed, 24 Jun 2015 07:24:41 +0000 (15:24 +0800)
committerYan, Zheng <zyan@redhat.com>
Mon, 3 Aug 2015 08:12:18 +0000 (16:12 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/client/Client.cc
src/client/Inode.h

index 5d9363a7adc5da1e3023660931cb0d31cdc35174..7b1b3e0a230af918d6b4c93ddfe2cb6ea01a5c52 100644 (file)
@@ -3120,7 +3120,6 @@ void Client::queue_cap_snap(Inode *in, SnapContext& old_snapc)
   } else if (in->caps_dirty() ||
             (used & CEPH_CAP_FILE_WR) ||
             (dirty & CEPH_CAP_ANY_WR)) {
-    in->get();
     CapSnap *capsnap = new CapSnap(in);
     in->cap_snaps[old_snapc.seq] = capsnap;
     capsnap->context = old_snapc;
@@ -3824,10 +3823,10 @@ void Client::kick_flushing_caps(MetaSession *session)
 
   for (xlist<CapSnap*>::iterator p = session->flushing_capsnaps.begin(); !p.end(); ++p) {
     CapSnap *capsnap = *p;
-    Inode *in = capsnap->in;
+    InodeRef& in = capsnap->in;
     ldout(cct, 20) << " reflushing capsnap " << capsnap
                   << " on " << *in << " to mds." << mds << dendl;
-    flush_snaps(in, false, capsnap);
+    flush_snaps(in.get(), false, capsnap);
   }
   for (xlist<Inode*>::iterator p = session->flushing_caps.begin(); !p.end(); ++p) {
     Inode *in = *p;
@@ -4378,10 +4377,9 @@ void Client::handle_cap_flushsnap_ack(MetaSession *session, Inode *in, MClientCa
     } else {
       ldout(cct, 5) << "handle_cap_flushedsnap mds." << mds << " flushed snap follows " << follows
              << " on " << *in << dendl;
+      in->cap_snaps.erase(follows);
       capsnap->flushing_item.remove_myself();
       delete capsnap;
-      in->cap_snaps.erase(follows);
-      put_inode(in);
     }
   } else {
     ldout(cct, 5) << "handle_cap_flushedsnap DUP(?) mds." << mds << " flushed snap follows " << follows
index 1ca7d333324565c6f0720dc8baab44c6d28337bc..a4d4f731a0440edeb95053a23e45e16a692c79ba 100644 (file)
@@ -13,6 +13,8 @@
 #include "osdc/ObjectCacher.h"
 #include "include/assert.h"
 
+#include "InodeRef.h"
+
 class Client;
 struct MetaSession;
 class Dentry;
@@ -43,7 +45,7 @@ struct Cap {
 
 struct CapSnap {
   //snapid_t follows;  // map key
-  Inode *in;
+  InodeRef in;
   SnapContext context;
   int issued, dirty;