if (do_eval)
eval_subtree_root(dir->get_inode());
-
- // journal inode?
- // (this is a large hammer to ensure that dirfragtree updates will
- // hit the disk before the relevant dirfrags ever close)
- if (dir->inode->is_auth() &&
- dir->inode->can_auth_pin() &&
- (mds->is_clientreplay() || mds->is_active() || mds->is_stopping())) {
- CInode *in = dir->inode;
- dout(10) << "try_subtree_merge_at journaling merged bound " << *in << dendl;
-
- in->auth_pin(this);
-
- // journal write-behind.
- inode_t *pi = in->project_inode();
- pi->version = in->pre_dirty();
-
- auto mut(std::make_shared<MutationImpl>());
- mut->ls = mds->mdlog->get_current_segment();
- EUpdate *le = new EUpdate(mds->mdlog, "subtree merge writebehind");
- mds->mdlog->start_entry(le);
-
- le->metablob.add_dir_context(in->get_parent_dn()->get_dir());
- journal_dirty_inode(mut.get(), &le->metablob, in);
-
- mds->mdlog->submit_entry(le, new C_MDC_SubtreeMergeWB(this, in, mut));
- mds->mdlog->flush();
- }
}
show_subtrees(15);
}
dir->unfreeze_tree();
cache->adjust_subtree_auth(dir, mds->get_nodeid());
- cache->try_subtree_merge(dir); // NOTE: this may journal subtree_map as side effect
+ cache->try_subtree_merge(dir);
if (notify_peer && mds->mdsmap->is_clientreplay_or_active_or_stopping(it->second.peer)) // tell them.
mds->send_message_mds(new MExportDirCancel(dir->dirfrag(), it->second.tid), it->second.peer);
break;
// adjust auth back to the exporter
cache->adjust_subtree_auth(dir, q->second.peer);
- cache->try_subtree_merge(dir); // NOTE: may journal subtree_map as side-effect
+ cache->try_subtree_merge(dir);
// bystanders?
if (q->second.bystanders.empty()) {
// adjust auth, with possible subtree merge.
cache->adjust_subtree_auth(dir, mds->get_nodeid());
- cache->try_subtree_merge(dir); // NOTE: may journal subtree_map as side-effect
+ cache->try_subtree_merge(dir);
// notify bystanders
export_notify_abort(dir, bounds);
// adjust auth, with possible subtree merge.
// (we do this _after_ removing EXPORTBOUND pins, to allow merges)
cache->adjust_subtree_auth(dir, it->second.peer);
- cache->try_subtree_merge(dir); // NOTE: may journal subtree_map as sideeffect
+ cache->try_subtree_merge(dir);
// no more auth subtree? clear scatter dirty
if (!dir->get_inode()->is_auth() &&
// log our failure
mds->mdlog->start_submit_entry(new EImportFinish(dir, false)); // log failure
- cache->try_subtree_merge(dir); // NOTE: this may journal subtree map as side effect
+ cache->try_subtree_merge(dir);
cache->trim(-1, num_dentries); // try trimming dentries
mds->mdlog->start_submit_entry(new EImportFinish(dir, true));
- cache->try_subtree_merge(dir); // NOTE: this may journal subtree_map as sideffect
+ cache->try_subtree_merge(dir);
// process delayed expires
cache->process_delayed_expire(dir);