Skip to content
Permalink
Browse files
MDEV-21501 Innodb AIO: release IO slots early in io_callback
prevent potential stalls for when all slots are used up, and all io threads
are used up, and io callbacks are slow.
  • Loading branch information
vaintroub committed Jan 16, 2020
1 parent c32fd50 commit 0b8b84d
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
@@ -4184,15 +4184,13 @@ fil_io(
/**********************************************************************/

/** Callback for AIO completion */
void fil_aio_callback(const tpool::aiocb *cb)
void fil_aio_callback(os_aio_userdata_t *data)
{
os_aio_userdata_t *data=(os_aio_userdata_t *)cb->m_userdata;
fil_node_t* node= data->node;
void* message = data->message;

ut_ad(fil_validate_skip());

ut_a(cb->m_err == DB_SUCCESS);

if (node == NULL) {
ut_ad(srv_shutdown_state == SRV_SHUTDOWN_EXIT_THREADS);
@@ -3872,12 +3872,12 @@ os_file_get_status(
}


extern void fil_aio_callback(const tpool::aiocb *cb);
extern void fil_aio_callback(os_aio_userdata_t *data);

static void io_callback(tpool::aiocb* cb)
{
fil_aio_callback(cb);

ut_a(cb->m_err == DB_SUCCESS);
os_aio_userdata_t data = *(os_aio_userdata_t*)cb->m_userdata;
/* Return cb back to cache*/
if (cb->m_opcode == tpool::aio_opcode::AIO_PREAD) {
if (read_slots->contains(cb)) {
@@ -3890,6 +3890,8 @@ static void io_callback(tpool::aiocb* cb)
ut_ad(write_slots->contains(cb));
write_slots->release(cb);
}

fil_aio_callback(&data);
}

#ifdef LINUX_NATIVE_AIO

0 comments on commit 0b8b84d

Please sign in to comment.