From: Yan, Zheng Date: Tue, 10 Mar 2015 03:11:15 +0000 (+0800) Subject: mds: pin inode when openning snap parent X-Git-Tag: v9.0.0~150^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b815cf61c1d53bd0cd93186ec62842c8b122f279;p=ceph.git mds: pin inode when openning snap parent make sure SnapRealm not get freed before C_SR_RetryOpenParents get executed. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/SnapRealm.cc b/src/mds/SnapRealm.cc index 627892421e2..080d44c7b5c 100644 --- a/src/mds/SnapRealm.cc +++ b/src/mds/SnapRealm.cc @@ -71,13 +71,16 @@ struct C_SR_RetryOpenParents : public MDSInternalContextBase { MDSInternalContextBase* fin; C_SR_RetryOpenParents(SnapRealm *s, snapid_t f, snapid_t l, snapid_t pl, inodeno_t p, MDSInternalContextBase *c) : - sr(s), first(f), last(l), parent_last(pl), parent(p), fin(c) {} + sr(s), first(f), last(l), parent_last(pl), parent(p), fin(c) { + sr->inode->get(CInode::PIN_OPENINGSNAPPARENTS); + } MDS *get_mds() { return sr->mdcache->mds; } void finish(int r) { if (r < 0) sr->_remove_missing_parent(parent_last, parent, r); if (sr->_open_parents(fin, first, last)) fin->complete(0); + sr->inode->put(CInode::PIN_OPENINGSNAPPARENTS); } };