Splitting a file is trivial; do it. No special case for 'stray'.
<< dendl;
dout(30) << " siblings are " << parent->open_children << dendl;
snaprealm->parent = parent;
- if (!nosplit &&
- is_dir() &&
- !get_parent_dir()->get_inode()->is_stray()) // optimization
+ if (!nosplit)
parent->split_at(snaprealm);
parent->open_children.insert(snaprealm);
}
dout(10) << "split_at " << *child
<< " on " << *child->inode << dendl;
+ if (!child->inode->is_dir()) {
+ // it's not a dir:
+ // - no open children.
+ // - only need to move this child's inode's caps.
+ child->inode->move_to_containing_realm(child);
+ return;
+ }
+
+ // it's a dir.
+
// split open_children
dout(10) << " open_children are " << open_children << dendl;
for (set<SnapRealm*>::iterator p = open_children.begin();