Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

luminous: bluestore: asyn cdeferred_try_submit deadlock #17494

Merged
merged 1 commit into from Sep 8, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/os/bluestore/BlueStore.cc
Expand Up @@ -3474,6 +3474,7 @@ BlueStore::BlueStore(CephContext *cct, const string& path)
throttle_deferred_bytes(cct, "bluestore_throttle_deferred_bytes",
cct->_conf->bluestore_throttle_bytes +
cct->_conf->bluestore_throttle_deferred_bytes),
deferred_finisher(cct, "defered_finisher", "dfin"),
kv_sync_thread(this),
kv_finalize_thread(this),
mempool_thread(this)
Expand All @@ -3492,6 +3493,7 @@ BlueStore::BlueStore(CephContext *cct,
throttle_deferred_bytes(cct, "bluestore_throttle_deferred_bytes",
cct->_conf->bluestore_throttle_bytes +
cct->_conf->bluestore_throttle_deferred_bytes),
deferred_finisher(cct, "defered_finisher", "dfin"),
kv_sync_thread(this),
kv_finalize_thread(this),
min_alloc_size(_min_alloc_size),
Expand Down Expand Up @@ -8292,6 +8294,7 @@ void BlueStore::_kv_start()
finishers.push_back(f);
}

deferred_finisher.start();
for (auto f : finishers) {
f->start();
}
Expand Down Expand Up @@ -8329,6 +8332,8 @@ void BlueStore::_kv_stop()
kv_finalize_stop = false;
}
dout(10) << __func__ << " stopping finishers" << dendl;
deferred_finisher.wait_for_empty();
deferred_finisher.stop();
for (auto f : finishers) {
f->wait_for_empty();
f->stop();
Expand Down Expand Up @@ -8773,7 +8778,7 @@ void BlueStore::_deferred_aio_finish(OpSequencer *osr)
deferred_queue.erase(q);
} else if (deferred_aggressive) {
dout(20) << __func__ << " queuing async deferred_try_submit" << dendl;
finishers[0]->queue(new FunctionContext([&](int) {
deferred_finisher.queue(new FunctionContext([&](int) {
deferred_try_submit();
}));
}
Expand Down
1 change: 1 addition & 0 deletions src/os/bluestore/BlueStore.h
Expand Up @@ -1846,6 +1846,7 @@ class BlueStore : public ObjectStore,
deferred_osr_queue_t deferred_queue; ///< osr's with deferred io pending
int deferred_queue_size = 0; ///< num txc's queued across all osrs
atomic_int deferred_aggressive = {0}; ///< aggressive wakeup of kv thread
Finisher deferred_finisher;

int m_finisher_num = 1;
vector<Finisher*> finishers;
Expand Down