#endif
}
+ if (in.snaprealm)
+ out << " snaprealm=" << in.snaprealm;
+
if (in.state_test(CInode::STATE_AMBIGUOUSAUTH)) out << " AMBIGAUTH";
if (in.state_test(CInode::STATE_NEEDSRECOVER)) out << " needsrecover";
if (in.state_test(CInode::STATE_RECOVERING)) out << " recovering";
// remove
if (newsize < oldsize) {
- const SnapContext& snapc = in->find_snaprealm()->get_snap_context();
+ SnapRealm *realm = in->find_snaprealm();
+ dout(10) << "_do_purge_inode realm " << *realm << dendl;
+ const SnapContext& snapc = realm->get_snap_context();
+ dout(10) << "_do_purge_inode snapc " << snapc << " on " << *in << dendl;
mds->filer->remove(in->inode.ino, &in->inode.layout, snapc,
newsize, oldsize-newsize, 0,
0, new C_MDC_PurgeFinish(this, in, newsize, oldsize));
if (straydn) {
dout(20) << " straydn is " << *straydn << dendl;
straydn->dir->link_primary_inode(straydn, in);
-
+
+ SnapRealm *oldparent = dn->dir->inode->find_snaprealm();
+
+ bool isnew = false;
if (!straydn->inode->snaprealm) {
straydn->inode->open_snaprealm();
- mdcache->do_realm_split_notify(straydn->inode);
+ straydn->inode->snaprealm->seq = oldparent->get_newest_seq();
+ isnew = true;
}
- straydn->inode->snaprealm->add_past_parent(dn->dir->inode->find_snaprealm());
+ straydn->inode->snaprealm->add_past_parent(oldparent);
+ if (isnew)
+ mdcache->do_realm_split_notify(straydn->inode);
}
dn->mark_dirty(dnpv, mdr->ls);