--- storage/innobase/os/os0file.cc | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 03ea0357bc9..c70465e87d2 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -678,6 +678,13 @@ private: MY_ATTRIBUTE((warn_unused_result)); #endif /* LINUX_NATIVE_AIO */ + /** Submit buffered AIO requests on the array to the kernel. + (low level function). + @param[in] acquire_mutex specifies whether to lock array mutex + @param[in] array for which to submit IO */ + static void os_aio_dispatch_read_array_submit_low_for_array( + bool acquire_mutex MY_ATTRIBUTE((unused)), AIO* arr); + private: typedef std::vector Slots; @@ -3031,12 +3038,26 @@ os_aio_linux_handler( void AIO::os_aio_dispatch_read_array_submit_low( bool acquire_mutex MY_ATTRIBUTE((unused))) +{ + os_aio_dispatch_read_array_submit_low_for_array(acquire_mutex, s_reads); + if (s_ibuf != NULL) { + os_aio_dispatch_read_array_submit_low_for_array(acquire_mutex, s_ibuf); + } +} + +/** Submit buffered AIO requests on the array to the kernel. +(low level function). +@param[in] acquire_mutex specifies whether to lock array mutex +@param[in] array for which to submit IO */ +void +AIO::os_aio_dispatch_read_array_submit_low_for_array( + bool acquire_mutex MY_ATTRIBUTE((unused)), AIO* arr) { if (!srv_use_native_aio) { return; } #if defined(LINUX_NATIVE_AIO) - AIO* array = AIO::s_reads; + AIO* array = arr; ulint total_submitted = 0; if (acquire_mutex) array->acquire(); @@ -3125,7 +3146,7 @@ AIO::linux_dispatch(Slot* slot, bool should_buffer) ulint io_ctx_index = slot->pos / slots_per_segment; if (should_buffer) { - ut_ad(this == s_reads); + ut_ad(this == s_reads || this == s_ibuf); acquire(); /* There are m_slots.size() elements in m_pending, @@ -3142,7 +3163,7 @@ AIO::linux_dispatch(Slot* slot, bool should_buffer) m_pending[n] = iocb; ++count; if (count == slots_per_segment) { - AIO::os_aio_dispatch_read_array_submit_low(false); + AIO::os_aio_dispatch_read_array_submit_low_for_array(false, this); } release(); return(true); -- 2.17.1