snaprealm->srnode.past_parents.size()) {
invalidate_cached_snaps = true;
// re-open past parents
- snaprealm->open = false;
+ snaprealm->_close_parents();
dout(10) << " realm " << *snaprealm << " past_parents " << snaprealm->srnode.past_parents
<< " -> " << next_snaprealm->past_parents << dendl;
return -ESTALE;
// make sure snaprealm are open...
- if (mdr && cur->snaprealm && !cur->snaprealm->open &&
+ if (mdr && cur->snaprealm && !cur->snaprealm->is_open() &&
!cur->snaprealm->open_parents(_get_waiter(mdr, req, fin))) {
return 1;
}
cur = in;
// make sure snaprealm are open...
- if (mdr && cur->snaprealm && !cur->snaprealm->open &&
+ if (mdr && cur->snaprealm && !cur->snaprealm->is_open() &&
!cur->snaprealm->open_parents(_get_waiter(mdr, req, fin))) {
return 1;
}
::decode(seq, p);
in->open_snaprealm();
- in->snaprealm->open = true;
in->snaprealm->srnode.seq = seq;
in->snaprealm->srnode.created = seq;
+ bool ok = in->snaprealm->_open_parents(NULL);
+ assert(ok);
do_realm_invalidate_and_update_notify(in, CEPH_SNAP_OP_SPLIT);
return;
}
- if (mdr && in->snaprealm &&
+ if (mdr && in->snaprealm && !in->snaprealm->is_open() &&
!in->snaprealm->open_parents(new C_MDS_RetryRequest(mdcache, mdr))) {
return;
}
return false;
}
+ bool is_open() { return open; }
+ void _close_parents() { open = false; }
bool _open_parents(MDSInternalContextBase *retryorfinish, snapid_t first=1, snapid_t last=CEPH_NOSNAP);
void _remove_missing_parent(snapid_t snapid, inodeno_t parent, int err);
bool open_parents(MDSInternalContextBase *retryorfinish) {