diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-19 21:24:17 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-19 21:24:17 +0300 |
commit | 797361cfc0b97ebf8d6f26f01a2662d2daef3ca6 (patch) | |
tree | 7d07136675a04dbecd34cb66f1a275d388c21a8a /storage/innobase/buf/buf0flu.cc | |
parent | 7047d9bd1cc6af93d446fe0fd5974d8b48a8fe63 (diff) | |
download | mariadb-git-bb-10.6-MDEV-26826.tar.gz |
MDEV-26826 Duplicated computations of buf_pool.page_hash addressesbb-10.6-MDEV-26826
Since commit bd5a6403cace36c6ed428cde62e35adcd3f7e7d0 (MDEV-26033)
we can actually calculate the buf_pool.page_hash cell and latch
addresses while not holding buf_pool.mutex.
buf_page_alloc_descriptor(): Remove the MEM_UNDEFINED.
We now expect buf_page_t::hash to be zero-initialized.
buf_pool_t::hash_chain: Dedicated data type for buf_pool.page_hash.array.
buf_LRU_free_one_page(): Merged to the only caller
buf_pool_t::corrupted_evict().
Diffstat (limited to 'storage/innobase/buf/buf0flu.cc')
-rw-r--r-- | storage/innobase/buf/buf0flu.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index db546e287b4..1f720989f6f 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -947,7 +947,9 @@ static bool buf_flush_check_neighbor(const page_id_t id, ulint fold, bool lru) mysql_mutex_assert_owner(&buf_pool.mutex); ut_ad(fold == id.fold()); - buf_page_t *bpage= buf_pool.page_hash_get_low(id, fold); + /* FIXME: cell_get() is being invoked while holding buf_pool.mutex */ + const buf_page_t *bpage= + buf_pool.page_hash.get(id, buf_pool.page_hash.cell_get(fold)); if (!bpage || buf_pool.watch_is_sentinel(*bpage)) return false; @@ -1107,9 +1109,10 @@ static ulint buf_flush_try_neighbors(fil_space_t *space, id_fold= id.fold(); } + const buf_pool_t::hash_chain &chain= buf_pool.page_hash.cell_get(id_fold); mysql_mutex_lock(&buf_pool.mutex); - if (buf_page_t *bpage= buf_pool.page_hash_get_low(id, id_fold)) + if (buf_page_t *bpage= buf_pool.page_hash.get(id, chain)) { ut_ad(bpage->in_file()); /* We avoid flushing 'non-old' blocks in an LRU flush, |