The issue is missing watch_page recheck in buf_page_init_for_read() after the mutex re-acquisition. There is an re-check already "if (UNIV_UNLIKELY(lru))", but it was not adjusted for the buffer pool mutex split: stock released buffer pool mutex some of the time, we release the LRU list mutex in its place all the time.
The issue is missing watch_page recheck in buf_page_ init_for_ read() after the mutex re-acquisition. There is an re-check already "if (UNIV_UNLIKELY( lru))", but it was not adjusted for the buffer pool mutex split: stock released buffer pool mutex some of the time, we release the LRU list mutex in its place all the time.