From 3c6a6c46d5808d6c42ed4dcfb441bad64366686b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 3 Aug 2017 16:37:36 -0400 Subject: [PATCH] os/bluestore: set deferred_aggressive if initial throttle get fails This ensures that in-progress transactions with deferred writes queue their IO immediately. Otherwise, we may end up waiting indefinitely. This is a biggish hammer. Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 7276b60fa40..baf4eff96b3 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8808,9 +8808,13 @@ int BlueStore::queue_transactions( if (txc->deferred_txn) { // ensure we do not block here because of deferred writes if (!throttle_deferred_bytes.get_or_fail(txc->cost)) { + dout(10) << __func__ << " failed get throttle_deferred_bytes, aggressive" + << dendl; + ++deferred_aggressive; deferred_submit_all(); throttle_deferred_bytes.get(txc->cost); - } + --deferred_aggressive; + } } utime_t tend = ceph_clock_now();