le->metablob.add_primary_dentry(dn, in, true);
} else {
predirty_journal_parents(mut, &le->metablob, in, dir, PREDIRTY_DIR, 1);
- journal_dirty_inode(mut, &le->metablob, in);
+ journal_dirty_inode(mut.get(), &le->metablob, in);
dn->push_projected_linkage(in->ino(), in->d_type());
le->metablob.add_remote_dentry(dn, true, in->ino(), in->d_type());
le->metablob.add_root(true, in);
mds->mdlog->start_entry(le);
le->metablob.add_dir_context(in->get_parent_dn()->get_dir());
- journal_dirty_inode(mut, &le->metablob, in);
+ journal_dirty_inode(mut.get(), &le->metablob, in);
mds->mdlog->submit_entry(le);
mds->mdlog->wait_for_safe(new C_MDC_SubtreeMergeWB(this, in, mut));
return oldin;
}
-void MDCache::journal_cow_dentry(MutationRef& mut, EMetaBlob *metablob,
+void MDCache::journal_cow_dentry(MutationImpl *mut, EMetaBlob *metablob,
CDentry *dn, snapid_t follows,
CInode **pcow_inode, CDentry::linkage_t *dnl)
{
{
dout(10) << "journal_cow_inode follows " << follows << " on " << *in << dendl;
CDentry *dn = in->get_projected_parent_dn();
- journal_cow_dentry(mut, metablob, dn, follows, pcow_inode);
+ journal_cow_dentry(mut.get(), metablob, dn, follows, pcow_inode);
}
-void MDCache::journal_dirty_inode(MutationRef& mut, EMetaBlob *metablob, CInode *in, snapid_t follows)
+void MDCache::journal_dirty_inode(MutationImpl *mut, EMetaBlob *metablob, CInode *in, snapid_t follows)
{
if (in->is_base()) {
metablob->add_root(true, in, in->get_projected_inode());
* accounted_rstat on scatterlock sync may not match our current
* rstat. this is normal and expected.
*/
-void MDCache::predirty_journal_parents(MutationRef& mut, EMetaBlob *blob,
+void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
CInode *in, CDir *parent,
int flags, int linkunlink,
snapid_t cfollows)
p != lsi.end();
++p) {
CInode *cur = *p;
- journal_dirty_inode(mut, blob, cur);
+ journal_dirty_inode(mut.get(), blob, cur);
}
}
le->metablob.add_primary_dentry(dn, in, true);
le->metablob.add_truncate_finish(in->ino(), ls->offset);
- journal_dirty_inode(mut, &le->metablob, in);
+ journal_dirty_inode(mut.get(), &le->metablob, in);
mds->mdlog->submit_entry(le, new C_MDC_TruncateLogged(this, in, mut));
// flush immediately if there are readers/writers waiting
EUpdate *le = new EUpdate(mds->mdlog, add ? "anchor_create":"anchor_destroy");
mds->mdlog->start_entry(le);
predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY);
- journal_dirty_inode(mut, &le->metablob, in);
+ journal_dirty_inode(mut.get(), &le->metablob, in);
le->metablob.add_table_transaction(TABLE_ANCHOR, atid);
mds->mdlog->submit_entry(le, new C_MDC_AnchorLogged(this, in, atid, mut));
mds->mdlog->flush();
// journal dirfragtree
inode_t *pi = diri->project_inode();
pi->version = diri->pre_dirty();
- journal_dirty_inode(mdr, &le->metablob, diri);
+ journal_dirty_inode(mdr.get(), &le->metablob, diri);
} else {
mds->locker->mark_updated_scatterlock(&diri->dirfragtreelock);
mdr->ls->dirty_dirfrag_dirfragtree.push_back(&diri->item_dirty_dirfrag_dirfragtree);
// log + wait
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur,
truncating_smaller, changed_ranges));
le->metablob.add_client_req(mdr->reqid, mdr->client_request->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, in, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, in);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, in);
// do the open
SnapRealm *realm = in->find_snaprealm();
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
}
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
}
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
return;
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
return;
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
}
mdlog->start_entry(le);
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, cur);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, cur);
journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
}
mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1); // new dn
mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, 0, PREDIRTY_PRIMARY); // targeti
le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type()); // new remote
- mdcache->journal_dirty_inode(mdr, &le->metablob, targeti);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, targeti);
// do this after predirty_*, to avoid funky extra dnl arg
dn->push_projected_linkage(targeti->ino(), targeti->d_type());
} else {
dn->pre_dirty();
mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, -1);
- mdcache->journal_cow_dentry(mdr, &le->metablob, dn);
+ mdcache->journal_cow_dentry(mdr.get(), &le->metablob, dn);
le->metablob.add_null_dentry(dn, true);
}
// commit case
mdcache->predirty_journal_parents(mdr, &le->commit, dnl->get_inode(), 0, PREDIRTY_SHALLOW|PREDIRTY_PRIMARY, 0);
- mdcache->journal_dirty_inode(mdr, &le->commit, targeti);
+ mdcache->journal_dirty_inode(mdr.get(), &le->commit, targeti);
// set up commit waiter
mdr->more()->slave_commit = new C_MDS_SlaveLinkCommit(this, mdr, targeti);
// remote link. update remote inode.
mdcache->predirty_journal_parents(mdr, &le->metablob, in, dn->get_dir(), PREDIRTY_DIR, -1);
mdcache->predirty_journal_parents(mdr, &le->metablob, in, 0, PREDIRTY_PRIMARY);
- mdcache->journal_dirty_inode(mdr, &le->metablob, in);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, in);
}
- mdcache->journal_cow_dentry(mdr, &le->metablob, dn);
+ mdcache->journal_cow_dentry(mdr.get(), &le->metablob, dn);
le->metablob.add_null_dentry(dn, true);
if (in->is_dir()) {
if (oldin->is_auth()) {
// auth for targeti
metablob->add_dir_context(oldin->get_projected_parent_dir());
- mdcache->journal_cow_dentry(mdr, metablob, oldin->get_projected_parent_dn(),
+ mdcache->journal_cow_dentry(mdr.get(), metablob, oldin->get_projected_parent_dn(),
CEPH_NOSNAP, 0, destdnl);
metablob->add_primary_dentry(oldin->get_projected_parent_dn(), oldin, true);
}
if (srcdnl->is_remote()) {
if (!linkmerge) {
if (destdn->is_auth() && !destdnl->is_null())
- mdcache->journal_cow_dentry(mdr, metablob, destdn, CEPH_NOSNAP, 0, destdnl);
+ mdcache->journal_cow_dentry(mdr.get(), metablob, destdn, CEPH_NOSNAP, 0, destdnl);
else
destdn->first = MAX(destdn->first, next_dest_snap);
metablob->add_remote_dentry(destdn, true, srcdnl->get_remote_ino(), srcdnl->get_remote_d_type());
if (srci->get_projected_parent_dn()->is_auth()) { // it's remote
metablob->add_dir_context(srci->get_projected_parent_dir());
- mdcache->journal_cow_dentry(mdr, metablob, srci->get_projected_parent_dn(), CEPH_NOSNAP, 0, srcdnl);
+ mdcache->journal_cow_dentry(mdr.get(), metablob, srci->get_projected_parent_dn(), CEPH_NOSNAP, 0, srcdnl);
metablob->add_primary_dentry(srci->get_projected_parent_dn(), srci, true);
}
} else {
if (destdn->is_auth() && !destdnl->is_null())
- mdcache->journal_cow_dentry(mdr, metablob, destdn, CEPH_NOSNAP, 0, destdnl);
+ mdcache->journal_cow_dentry(mdr.get(), metablob, destdn, CEPH_NOSNAP, 0, destdnl);
else
destdn->first = MAX(destdn->first, next_dest_snap);
srci->project_past_snaprealm_parent(dest_realm);
if (destdn->is_auth() && !destdnl->is_null())
- mdcache->journal_cow_dentry(mdr, metablob, destdn, CEPH_NOSNAP, 0, destdnl);
+ mdcache->journal_cow_dentry(mdr.get(), metablob, destdn, CEPH_NOSNAP, 0, destdnl);
else
destdn->first = MAX(destdn->first, next_dest_snap);
// src
if (srcdn->is_auth()) {
dout(10) << " journaling srcdn " << *srcdn << dendl;
- mdcache->journal_cow_dentry(mdr, metablob, srcdn, CEPH_NOSNAP, 0, srcdnl);
+ mdcache->journal_cow_dentry(mdr.get(), metablob, srcdn, CEPH_NOSNAP, 0, srcdnl);
// also journal the inode in case we need do slave rename rollback. It is Ok to add
// both primary and NULL dentries. Because during journal replay, null dentry is
// processed after primary dentry.
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
le->metablob.add_table_transaction(TABLE_SNAP, stid);
mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, diri);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
// journal the snaprealm changes
mdlog->submit_entry(le, new C_MDS_mksnap_finish(mds, mdr, diri, info));
le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
le->metablob.add_table_transaction(TABLE_SNAP, stid);
mdcache->predirty_journal_parents(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false);
- mdcache->journal_dirty_inode(mdr, &le->metablob, diri);
+ mdcache->journal_dirty_inode(mdr.get(), &le->metablob, diri);
mdlog->submit_entry(le, new C_MDS_rmsnap_finish(mds, mdr, diri, snapid));
mdlog->flush();