From 2c6278ed4ba8022e98a8893202aa91c4934b4830 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Mon, 24 Jul 2017 15:35:10 +0100 Subject: [PATCH] [block_cache] Be better about flushing dirty blocks on demand. Dirty blocks could prevent a clean lock being given. Patch from mingus. --- block-cache/block_cache.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/block-cache/block_cache.cc b/block-cache/block_cache.cc index f276625..7f603c2 100644 --- a/block-cache/block_cache.cc +++ b/block-cache/block_cache.cc @@ -319,14 +319,13 @@ block_cache::new_block(block_address index) block *b; b = __alloc_block(); - if (!b) { - if (clean_.empty()) { + while (!b && nr_locked_ < nr_cache_blocks_) { + b = find_unused_clean_block(); + if (!b) { if (io_pending_.empty()) writeback(16); wait_io(); } - - b = find_unused_clean_block(); } if (b) {