From: Yan, Zheng Date: Mon, 1 Jun 2015 06:08:04 +0000 (+0800) Subject: mds: remove pruned parent snaprealm from snaprealm's open_past_parents X-Git-Tag: v9.0.2~40^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c3fa768db80c47d8a059e60194a2531abeb14bdb;p=ceph.git mds: remove pruned parent snaprealm from snaprealm's open_past_parents Signed-off-by: Yan, Zheng --- diff --git a/src/mds/SnapRealm.cc b/src/mds/SnapRealm.cc index 35a0f757a14f..5b4bc21f2465 100644 --- a/src/mds/SnapRealm.cc +++ b/src/mds/SnapRealm.cc @@ -65,6 +65,16 @@ void SnapRealm::add_open_past_parent(SnapRealm *parent) parent->inode->get(CInode::PIN_PASTSNAPPARENT); } +void SnapRealm::remove_open_past_parent(inodeno_t ino) +{ + map::iterator p = open_past_parents.find(ino); + assert(p != open_past_parents.end()); + SnapRealm *parent = p->second; + open_past_parents.erase(p); + parent->open_past_children.erase(this); + parent->inode->put(CInode::PIN_PASTSNAPPARENT); +} + struct C_SR_RetryOpenParents : public MDSInternalContextBase { SnapRealm *sr; snapid_t first, last, parent_last; @@ -518,6 +528,7 @@ void SnapRealm::prune_past_parents() *q > p->first) { dout(10) << "prune_past_parents pruning [" << p->second.first << "," << p->first << "] " << p->second.ino << dendl; + remove_open_past_parent(p->second.ino); srnode.past_parents.erase(p++); } else { dout(10) << "prune_past_parents keeping [" << p->second.first << "," << p->first diff --git a/src/mds/SnapRealm.h b/src/mds/SnapRealm.h index ad55adc01723..feffea19be35 100644 --- a/src/mds/SnapRealm.h +++ b/src/mds/SnapRealm.h @@ -76,6 +76,7 @@ struct SnapRealm { } bool have_past_parents_open(snapid_t first=1, snapid_t last=CEPH_NOSNAP); void add_open_past_parent(SnapRealm *parent); + void remove_open_past_parent(inodeno_t ino); void close_parents(); void prune_past_parents();