From: Yan, Zheng Date: Wed, 24 Jun 2015 07:24:41 +0000 (+0800) Subject: client: convert CapSnap::in to smart pointer X-Git-Tag: v9.1.0~442^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e7920c93f24f77fb67d434f26d4b5df75aeb8380;p=ceph.git client: convert CapSnap::in to smart pointer Signed-off-by: Yan, Zheng --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 5d9363a7adc5..7b1b3e0a230a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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::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::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 diff --git a/src/client/Inode.h b/src/client/Inode.h index 1ca7d3333245..a4d4f731a044 100644 --- a/src/client/Inode.h +++ b/src/client/Inode.h @@ -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;