Skip to content

Commit 1a947b3

Browse files
committed
Merge PR ceph#62553 into main
* refs/pull/62553/head: mds: fix issues with use-after-free in C_Flush_Journal mds: fix issues with use-after-free in C_Flush_Journal Reviewed-by: Patrick Donnelly <[email protected]> Reviewed-by: Venky Shankar <[email protected]>
2 parents 97a8c77 + e1ab8eb commit 1a947b3

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

src/mds/MDLog.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ LogSegment* MDLog::_start_new_segment(SegmentBoundary* sb)
389389
return ls;
390390
}
391391

392-
void MDLog::_submit_entry(LogEvent *le, MDSLogContextBase* c)
392+
LogSegment::seq_t MDLog::_submit_entry(LogEvent *le, MDSLogContextBase* c)
393393
{
394394
dout(20) << __func__ << " " << *le << dendl;
395395
ceph_assert(ceph_mutex_is_locked_by_me(mds->mds_lock));
@@ -436,6 +436,7 @@ void MDLog::_submit_entry(LogEvent *le, MDSLogContextBase* c)
436436
}
437437

438438
unflushed++;
439+
return event_seq;
439440
}
440441

441442
void MDLog::_segment_upkeep()

src/mds/MDLog.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,12 @@ class MDLog {
136136

137137
void finish_head_waiters();
138138

139-
void submit_entry(LogEvent *e, MDSLogContextBase* c = 0) {
139+
LogSegment::seq_t submit_entry(LogEvent *e, MDSLogContextBase* c = 0) {
140140
std::lock_guard l(submit_mutex);
141-
_submit_entry(e, c);
141+
auto seq = _submit_entry(e, c);
142142
_segment_upkeep();
143143
submit_cond.notify_all();
144+
return seq;
144145
}
145146

146147
void wait_for_safe(Context* c);
@@ -293,7 +294,7 @@ class MDLog {
293294
void try_to_commit_open_file_table(uint64_t last_seq);
294295
LogSegment* _start_new_segment(SegmentBoundary* sb);
295296
void _segment_upkeep();
296-
void _submit_entry(LogEvent* e, MDSLogContextBase* c);
297+
LogSegment::seq_t _submit_entry(LogEvent* e, MDSLogContextBase* c);
297298

298299
void try_expire(LogSegment *ls, int op_prio);
299300
void _maybe_expired(LogSegment *ls, int op_prio);

src/mds/MDSRank.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,7 @@ class C_Flush_Journal : public MDSInternalContext {
9898
// I need to seal off the current segment, and then mark all
9999
// previous segments for expiry
100100
auto* sle = mdcache->create_subtree_map();
101-
mdlog->submit_entry(sle);
102-
seq = sle->get_seq();
101+
seq = mdlog->submit_entry(sle);
103102

104103
Context *ctx = new LambdaContext([this](int r) {
105104
handle_clear_mdlog(r);
@@ -180,10 +179,6 @@ class C_Flush_Journal : public MDSInternalContext {
180179
handle_write_head(r);
181180
}));
182181
mdlog->trim_expired_segments(ctx);
183-
184-
dout(5) << __func__ << ": trimming is complete; wait for journal head write. Journal expire_pos/trim_pos is now "
185-
<< std::hex << mdlog->get_journaler()->get_expire_pos() << "/"
186-
<< mdlog->get_journaler()->get_trimmed_pos() << dendl;
187182
}
188183

189184
void handle_write_head(int r) {
@@ -202,6 +197,10 @@ class C_Flush_Journal : public MDSInternalContext {
202197
*/
203198
ceph_assert(ceph_mutex_is_locked_by_me(mds->mds_lock));
204199
dout(20) << __func__ << ": r=" << r << dendl;
200+
201+
dout(5) << __func__ << ": trimming is complete; wait for journal head write. Journal expire_pos/trim_pos is now "
202+
<< std::hex << mdlog->get_journaler()->get_expire_pos() << "/"
203+
<< mdlog->get_journaler()->get_trimmed_pos() << dendl;
205204
on_finish->complete(r);
206205
}
207206

0 commit comments

Comments
 (0)