parent->inode->get(CInode::PIN_PASTSNAPPARENT);
}
+void SnapRealm::remove_open_past_parent(inodeno_t ino)
+{
+ map<inodeno_t,SnapRealm*>::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;
*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
}
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();