summaryrefslogtreecommitdiff
path: root/innobase/buf/buf0flu.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/buf/buf0flu.c')
-rw-r--r--innobase/buf/buf0flu.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/innobase/buf/buf0flu.c b/innobase/buf/buf0flu.c
index 4217a3ba99b..8184f10d6e9 100644
--- a/innobase/buf/buf0flu.c
+++ b/innobase/buf/buf0flu.c
@@ -138,15 +138,11 @@ buf_flush_ready_for_flush(
return(TRUE);
- } else if ((block->old || (UT_LIST_GET_LEN(buf_pool->LRU)
- < BUF_LRU_OLD_MIN_LEN))
- && (block->buf_fix_count == 0)) {
+ } else if (block->buf_fix_count == 0) {
/* If we are flushing the LRU list, to avoid deadlocks
we require the block not to be bufferfixed, and hence
- not latched. Since LRU flushed blocks are soon moved
- to the free list, it is good to flush only old blocks
- from the end of the LRU list. */
+ not latched. */
return(TRUE);
}
@@ -560,6 +556,15 @@ buf_flush_try_neighbors(
block = buf_page_hash_get(space, i);
+ if (block && flush_type == BUF_FLUSH_LRU && i != offset
+ && !block->old) {
+
+ /* We avoid flushing 'non-old' blocks in an LRU flush,
+ because the flushed blocks are soon freed */
+
+ continue;
+ }
+
if (block && buf_flush_ready_for_flush(block, flush_type)) {
mutex_exit(&(buf_pool->mutex));