mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
mds: fix CInode::pop_projected_snaprealm()
CInode::pop_projected_snaprealm() was called after calling CDentry::pop_projected_linkage(). So get_parent_inode()->find_snaprealm() is not past parent snaprealm. The fix is set snaprealm->open to 'false' and let SnapRealm::_open_parents() open the new past parent. Signed-off-by: Yan, Zheng <zyan@redhat.com>
This commit is contained in:
parent
6ed6a68e62
commit
55063a9fdf
@ -443,20 +443,11 @@ void CInode::pop_projected_snaprealm(sr_t *next_snaprealm)
|
||||
} else if (next_snaprealm->past_parents.size() !=
|
||||
snaprealm->srnode.past_parents.size()) {
|
||||
invalidate_cached_snaps = true;
|
||||
// re-open past parents
|
||||
snaprealm->open = false;
|
||||
|
||||
// update parent pointer
|
||||
assert(snaprealm->open);
|
||||
assert(snaprealm->parent); // had a parent before
|
||||
SnapRealm *new_parent = get_parent_inode()->find_snaprealm();
|
||||
assert(new_parent);
|
||||
CInode *parenti = new_parent->inode;
|
||||
assert(parenti);
|
||||
assert(parenti->snaprealm);
|
||||
snaprealm->parent = new_parent;
|
||||
snaprealm->add_open_past_parent(new_parent);
|
||||
dout(10) << " realm " << *snaprealm << " past_parents " << snaprealm->srnode.past_parents
|
||||
<< " -> " << next_snaprealm->past_parents << dendl;
|
||||
dout(10) << " pinning new parent " << *parenti << dendl;
|
||||
}
|
||||
snaprealm->srnode = *next_snaprealm;
|
||||
delete next_snaprealm;
|
||||
|
Loading…
Reference in New Issue
Block a user