return get_projected_linkage()->inode;
}
- bool use_projected(client_t client, Mutation *mut) {
+ bool use_projected(client_t client, const MutationRef& mut) const {
return lock.can_read_projected(client) ||
lock.get_xlock_by() == mut;
}
- linkage_t *get_linkage(client_t client, Mutation *mut) {
+ linkage_t *get_linkage(client_t client, const MutationRef& mut) {
return use_projected(client, mut) ? get_projected_linkage() : get_linkage();
}
dout(10) << "assimilate_dirty_rstat_inodes done" << dendl;
}
-void CDir::assimilate_dirty_rstat_inodes_finish(Mutation *mut, EMetaBlob *blob)
+void CDir::assimilate_dirty_rstat_inodes_finish(MutationRef& mut, EMetaBlob *blob)
{
if (!state_test(STATE_ASSIMRSTAT))
return;
void resync_accounted_fragstat();
void resync_accounted_rstat();
void assimilate_dirty_rstat_inodes();
- void assimilate_dirty_rstat_inodes_finish(Mutation *mut, EMetaBlob *blob);
+ void assimilate_dirty_rstat_inodes_finish(MutationRef& mut, EMetaBlob *blob);
protected:
version_t projected_version;
struct C_Inode_FragUpdate : public Context {
CInode *in;
CDir *dir;
- Mutation *mut;
+ MutationRef mut;
- C_Inode_FragUpdate(CInode *i, CDir *d, Mutation *m) : in(i), dir(d), mut(m) {}
+ C_Inode_FragUpdate(CInode *i, CDir *d, MutationRef& m) : in(i), dir(d), mut(m) {}
void finish(int r) {
in->_finish_frag_update(dir, mut);
}
dout(10) << "finish_scatter_update " << fg << " journaling accounted scatterstat update v" << inode_version << dendl;
MDLog *mdlog = mdcache->mds->mdlog;
- Mutation *mut = new Mutation;
+ MutationRef mut(new MutationImpl);
mut->ls = mdlog->get_current_segment();
inode_t *pi = get_projected_inode();
}
}
-void CInode::_finish_frag_update(CDir *dir, Mutation *mut)
+void CInode::_finish_frag_update(CDir *dir, MutationRef& mut)
{
dout(10) << "_finish_frag_update on " << *dir << dendl;
mut->apply();
mut->cleanup();
- delete mut;
}
}
}
-void CInode::finish_scatter_gather_update_accounted(int type, Mutation *mut, EMetaBlob *metablob)
+void CInode::finish_scatter_gather_update_accounted(int type, MutationRef& mut, EMetaBlob *metablob)
{
dout(10) << "finish_scatter_gather_update_accounted " << type << " on " << *this << dendl;
assert(is_auth());
void encode_lock_state(int type, bufferlist& bl);
void decode_lock_state(int type, bufferlist& bl);
- void _finish_frag_update(CDir *dir, Mutation *mut);
+ void _finish_frag_update(CDir *dir, MutationRef& mut);
void clear_dirty_scattered(int type);
bool is_dirty_scattered();
void finish_scatter_update(ScatterLock *lock, CDir *dir,
version_t inode_version, version_t dir_accounted_version);
void finish_scatter_gather_update(int type);
- void finish_scatter_gather_update_accounted(int type, Mutation *mut, EMetaBlob *metablob);
+ void finish_scatter_gather_update_accounted(int type, MutationRef& mut, EMetaBlob *metablob);
// -- snap --
void open_snaprealm(bool no_split=false);