From: Jianpeng Ma Date: Tue, 6 Aug 2019 13:42:27 +0000 (+0800) Subject: os/bluestore: narrow deferred_lock in _deferred_aio_finish. X-Git-Tag: v15.1.0~1903^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=62049dd179531fcbf76abea6bcb09e5ab6438f09;p=ceph.git os/bluestore: narrow deferred_lock in _deferred_aio_finish. Signed-off-by: Jianpeng Ma --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index e79ad0b1beea..e9d111ef8553 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -11003,18 +11003,22 @@ void BlueStore::_deferred_aio_finish(OpSequencer *osr) DeferredBatch *b = osr->deferred_running; { - std::lock_guard l(deferred_lock); + deferred_lock.lock(); ceph_assert(osr->deferred_running == b); osr->deferred_running = nullptr; if (!osr->deferred_pending) { dout(20) << __func__ << " dequeueing" << dendl; auto q = deferred_queue.iterator_to(*osr); deferred_queue.erase(q); - } else if (deferred_aggressive) { - dout(20) << __func__ << " queuing async deferred_try_submit" << dendl; - deferred_finisher.queue(new C_DeferredTrySubmit(this)); + deferred_lock.unlock(); } else { - dout(20) << __func__ << " leaving queued, more pending" << dendl; + deferred_lock.unlock(); + if (deferred_aggressive) { + dout(20) << __func__ << " queuing async deferred_try_submit" << dendl; + deferred_finisher.queue(new C_DeferredTrySubmit(this)); + } else { + dout(20) << __func__ << " leaving queued, more pending" << dendl; + } } }