journal_cow_dentry(mut, metablob, dn, follows, pcow_inode);
}
-inode_t *MDCache::journal_dirty_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows)
+void MDCache::journal_dirty_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows)
{
if (in->is_base()) {
- return metablob->add_root(true, in, in->get_projected_inode());
+ metablob->add_root(true, in, in->get_projected_inode());
} else {
if (follows == CEPH_NOSNAP && in->last != CEPH_NOSNAP)
follows = in->first - 1;
CDentry *dn = in->get_projected_parent_dn();
if (!dn->get_projected_linkage()->is_null()) // no need to cow a null dentry
journal_cow_dentry(mut, metablob, dn, follows);
- return metablob->add_primary_dentry(dn, true, in);
+ metablob->add_primary_dentry(dn, true, in);
}
}
CInode **pcow_inode=0, CDentry::linkage_t *dnl=0);
void journal_cow_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows=CEPH_NOSNAP,
CInode **pcow_inode=0);
- inode_t *journal_dirty_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows=CEPH_NOSNAP);
+ void journal_dirty_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows=CEPH_NOSNAP);
void project_rstat_inode_to_frag(CInode *cur, CDir *parent, snapid_t first, int linkunlink);
void _project_rstat_inode_to_frag(inode_t& inode, snapid_t ofirst, snapid_t last,
}
// prepare
- inode_t *pi = 0, *ji = 0; // renamed inode
- inode_t *tpi = 0, *tji = 0; // target/overwritten inode
+ inode_t *pi = 0; // renamed inode
+ inode_t *tpi = 0; // target/overwritten inode
// target inode
if (!linkmerge) {
// project snaprealm, too
oldin->project_past_snaprealm_parent(straydn->get_dir()->inode->find_snaprealm());
straydn->first = MAX(oldin->first, next_dest_snap);
- tji = metablob->add_primary_dentry(straydn, true, oldin);
+ metablob->add_primary_dentry(straydn, true, oldin);
}
} else if (destdnl->is_remote()) {
if (oldin->is_auth()) {
// auth for targeti
metablob->add_dir_context(oldin->get_parent_dir());
mdcache->journal_cow_dentry(mdr, metablob, oldin->parent, CEPH_NOSNAP, 0, destdnl);
- tji = metablob->add_primary_dentry(oldin->parent, true, oldin);
+ metablob->add_primary_dentry(oldin->parent, true, oldin);
}
if (destdn->is_auth()) {
// auth for dn, not targeti
if (srci->get_parent_dn()->is_auth()) { // it's remote
metablob->add_dir_context(srci->get_parent_dir());
mdcache->journal_cow_dentry(mdr, metablob, srci->get_parent_dn(), CEPH_NOSNAP, 0, srcdnl);
- ji = metablob->add_primary_dentry(srci->get_parent_dn(), true, srci);
+ metablob->add_primary_dentry(srci->get_parent_dn(), true, srci);
}
} else {
if (destdn->is_auth() && !destdnl->is_null())
destdn->first = MAX(destdn->first, next_dest_snap);
if (destdn->is_auth())
- ji = metablob->add_primary_dentry(destdn, true, srci);
+ metablob->add_primary_dentry(destdn, true, srci);
else if (force_journal) {
dout(10) << " forced journaling destdn " << *destdn << dendl;
metablob->add_dir_context(destdn->get_dir());
- ji = metablob->add_primary_dentry(destdn, true, srci);
+ metablob->add_primary_dentry(destdn, true, srci);
}
}
if (srcdnl->is_primary() && destdn->is_auth())
srci->first = destdn->first;
- // do inode updates in journal, even if we aren't auth (hmm, is this necessary?)
- if (!silent) {
- if (ji && !pi) {
- ji->ctime = mdr->now;
- if (linkmerge)
- ji->nlink--;
- }
- if (tji && !tpi) {
- tji->nlink--;
- tji->ctime = mdr->now;
- }
- }
-
// anchor updates?
if (mdr->more()->src_reanchor_atid)
metablob->add_table_transaction(TABLE_ANCHOR, mdr->more()->src_reanchor_atid);
}
// return remote pointer to to-be-journaled inode
- inode_t *add_primary_dentry(CDentry *dn, bool dirty, CInode *in=0) {
- return add_primary_dentry(add_dir(dn->get_dir(), false),
- dn, dirty, in);
+ void add_primary_dentry(CDentry *dn, bool dirty, CInode *in=0) {
+ add_primary_dentry(add_dir(dn->get_dir(), false),
+ dn, dirty, in);
}
- inode_t *add_primary_dentry(dirlump& lump, CDentry *dn, bool dirty, CInode *in=0) {
+ void add_primary_dentry(dirlump& lump, CDentry *dn, bool dirty, CInode *in=0) {
if (!in)
in = dn->get_projected_linkage()->get_inode();
in->symlink, snapbl,
dirty, default_layout,
&in->old_inodes)));
- if (pi)
- lump.get_dfull().back()->inode = *pi;
- return &lump.get_dfull().back()->inode;
}
// convenience: primary or remote? figure it out.
- inode_t *add_dentry(CDentry *dn, bool dirty) {
+ void add_dentry(CDentry *dn, bool dirty) {
dirlump& lump = add_dir(dn->get_dir(), false);
- return add_dentry(lump, dn, dirty);
+ add_dentry(lump, dn, dirty);
}
- inode_t *add_dentry(dirlump& lump, CDentry *dn, bool dirty) {
+ void add_dentry(dirlump& lump, CDentry *dn, bool dirty) {
// primary or remote
if (dn->get_projected_linkage()->is_remote()) {
add_remote_dentry(dn, dirty);
- return 0;
+ return;
} else if (dn->get_projected_linkage()->is_null()) {
add_null_dentry(dn, dirty);
- return 0;
+ return;
}
assert(dn->get_projected_linkage()->is_primary());
- return add_primary_dentry(dn, dirty);
+ add_primary_dentry(dn, dirty);
}
- inode_t *add_root(bool dirty, CInode *in, inode_t *pi=0, fragtree_t *pdft=0, bufferlist *psnapbl=0,
+ void add_root(bool dirty, CInode *in, inode_t *pi=0, fragtree_t *pdft=0, bufferlist *psnapbl=0,
map<string,bufferptr> *px=0) {
in->last_journaled = my_offset;
//cout << "journaling " << in->inode.ino << " at " << my_offset << std::endl;
*pi, *pdft, *px,
in->symlink, snapbl,
dirty, default_layout, &in->old_inodes);
- return &root->inode;
}
dirlump& add_dir(CDir *dir, bool dirty, bool complete=false, bool isnew=false) {