If they are IO operations and need to take mds_lock on finish, label them.
Signed-off-by: Sage Weil <sage@redhat.com>
return in->inode.file_data_version;
}
-struct C_Locker_FileUpdate_finish : public Context {
+struct C_IO_Locker_FileUpdate_finish : public Context {
Locker *locker;
CInode *in;
MutationRef mut;
client_t client;
Capability *cap;
MClientCaps *ack;
- C_Locker_FileUpdate_finish(Locker *l, CInode *i, MutationRef& m,
- bool e=false, client_t c=-1,
- Capability *cp = 0,
- MClientCaps *ac = 0) :
- locker(l), in(i), mut(m), share(e), client(c), cap(cp),
- ack(ac) {
+ C_IO_Locker_FileUpdate_finish(Locker *l, CInode *i, MutationRef& m,
+ bool e=false, client_t c=-1,
+ Capability *cp = 0,
+ MClientCaps *ac = 0)
+ : locker(l), in(i), mut(m), share(e), client(c), cap(cp),
+ ack(ac) {
in->get(CInode::PIN_PTRWAITER);
}
void finish(int r) {
mdcache->journal_dirty_inode(mut.get(), metablob, in);
}
mds->mdlog->submit_entry(le,
- new C_Locker_FileUpdate_finish(this, in, mut, true));
+ new C_IO_Locker_FileUpdate_finish(this, in, mut, true));
wrlock_force(&in->filelock, mut); // wrlock for duration of journal
mut->auth_pin(in);
mdcache->predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY, 0, follows);
mdcache->journal_dirty_inode(mut.get(), &le->metablob, in, follows);
- mds->mdlog->submit_entry(le, new C_Locker_FileUpdate_finish(this, in, mut, false,
- client, NULL, ack));
+ mds->mdlog->submit_entry(le, new C_IO_Locker_FileUpdate_finish(this, in, mut,
+ false,
+ client, NULL,
+ ack));
}
mdcache->predirty_journal_parents(mut, &le->metablob, in, 0, PREDIRTY_PRIMARY, 0, follows);
mdcache->journal_dirty_inode(mut.get(), &le->metablob, in, follows);
- mds->mdlog->submit_entry(le, new C_Locker_FileUpdate_finish(this, in, mut, change_max,
- client, cap, ack));
+ mds->mdlog->submit_entry(le, new C_IO_Locker_FileUpdate_finish(this, in, mut,
+ change_max,
+ client, cap,
+ ack));
// only flush immediately if the lock is unstable, or unissued caps are wanted, or max_size is
// changing
if (((dirty & (CEPH_CAP_FILE_EXCL|CEPH_CAP_FILE_WR)) && !in->filelock.is_stable()) ||
in->finish_scatter_gather_update_accounted(lock->get_type(), mut, &le->metablob);
- mds->mdlog->submit_entry(le, new C_Locker_ScatterWB(this, lock, mut));
+ mds->mdlog->submit_entry(le, new C_IO_Locker_ScatterWB(this, lock, mut));
}
void Locker::scatter_writebehind_finish(ScatterLock *lock, MutationRef& mut)
void scatter_tempsync(ScatterLock *lock, bool *need_issue=0);
void scatter_writebehind(ScatterLock *lock);
- class C_Locker_ScatterWB : public Context {
+ class C_IO_Locker_ScatterWB : public Context {
Locker *locker;
ScatterLock *lock;
MutationRef mut;
public:
- C_Locker_ScatterWB(Locker *l, ScatterLock *sl, MutationRef& m) :
+ C_IO_Locker_ScatterWB(Locker *l, ScatterLock *sl, MutationRef& m) :
locker(l), lock(sl), mut(m) {}
void finish(int r) {
Mutex::Locker l(locker->mds->mds_lock);
private:
friend class C_MDL_CheckMaxSize;
friend class C_MDL_RequestInodeFileCaps;
- friend struct C_Locker_FileUpdate_finish;
+ friend struct C_IO_Locker_FileUpdate_finish;
friend class C_Locker_RetryCapRelease;
friend class C_Locker_Eval;
_truncate_inode(in, ls);
}
-struct C_MDC_TruncateFinish : public Context {
+struct C_IO_MDC_TruncateFinish : public Context {
MDCache *mdc;
CInode *in;
LogSegment *ls;
- C_MDC_TruncateFinish(MDCache *c, CInode *i, LogSegment *l) :
+ C_IO_MDC_TruncateFinish(MDCache *c, CInode *i, LogSegment *l) :
mdc(c), in(i), ls(l) {}
void finish(int r) {
assert(r == 0 || r == -ENOENT);
}
dout(10) << "_truncate_inode snapc " << snapc << " on " << *in << dendl;
mds->filer->truncate(in->inode.ino, &in->inode.layout, *snapc,
- pi->truncate_size, pi->truncate_from-pi->truncate_size, pi->truncate_seq, utime_t(), 0,
- 0, new C_OnFinisher(new C_MDC_TruncateFinish(this, in, ls), &mds->finisher));
+ pi->truncate_size, pi->truncate_from-pi->truncate_size,
+ pi->truncate_seq, utime_t(), 0,
+ 0, new C_OnFinisher(new C_IO_MDC_TruncateFinish(this, in,
+ ls),
+ &mds->finisher));
}
-struct C_MDC_TruncateLogged : public Context {
+struct C_IO_MDC_TruncateLogged : public Context {
MDCache *mdc;
CInode *in;
MutationRef mut;
- C_MDC_TruncateLogged(MDCache *m, CInode *i, MutationRef& mu) :
+ C_IO_MDC_TruncateLogged(MDCache *m, CInode *i, MutationRef& mu) :
mdc(m), in(i), mut(mu) {}
void finish(int r) {
mdc->truncate_inode_logged(in, mut);
le->metablob.add_truncate_finish(in->ino(), ls->seq);
journal_dirty_inode(mut.get(), &le->metablob, in);
- mds->mdlog->submit_entry(le, new C_MDC_TruncateLogged(this, in, mut));
+ mds->mdlog->submit_entry(le, new C_IO_MDC_TruncateLogged(this, in, mut));
// flush immediately if there are readers/writers waiting
if (in->get_caps_wanted() & (CEPH_CAP_FILE_RD|CEPH_CAP_FILE_WR))
public:
C_MDS_BootStart(MDS *m, MDS::BootStep n) : mds(m), nextstep(n) {}
void finish(int r) {
- Mutex::Locker l(mds->mds_lock);
- mds->boot_start(nextstep, r);
+ Mutex::Locker l(mds->mds_lock);
+ mds->boot_start(nextstep, r);
}
};
mdlog->flush();
}
-class C_MarkEvent : public Context
+class C_IO_MarkEvent : public Context
{
MDS *mds;
Context *true_finisher;
MDRequestRef mdr;
string event_str;
public:
- C_MarkEvent(MDS *mds_, Context *f, MDRequestRef& _mdr,
- const char *evt) :
- mds(mds_), true_finisher(f), mdr(_mdr), event_str("journal_committed: ") {
+ C_IO_MarkEvent(MDS *mds_, Context *f, MDRequestRef& _mdr,
+ const char *evt)
+ : mds(mds_), true_finisher(f), mdr(_mdr),
+ event_str("journal_committed: ") {
event_str += evt;
}
virtual void finish(int r) {
string event_str("submit entry: ");
event_str += event;
mdr->mark_event(event_str);
- mdlog->submit_entry(le, new C_MarkEvent(mds, fin, mdr, event));
+ mdlog->submit_entry(le, new C_IO_MarkEvent(mds, fin, mdr, event));
} else
mdlog->submit_entry(le, fin);
}