summaryrefslogtreecommitdiff
path: root/storage/innobase/fil/fil0fil.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/fil/fil0fil.cc')
-rw-r--r--storage/innobase/fil/fil0fil.cc68
1 files changed, 35 insertions, 33 deletions
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index be313140225..e4b352a05aa 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -2775,53 +2775,55 @@ func_exit:
#include <tpool.h>
-/** Callback for AIO completion */
-void fil_aio_callback(const IORequest &request)
+void IORequest::write_complete() const
{
ut_ad(fil_validate_skip());
- ut_ad(request.node);
+ ut_ad(node);
+ ut_ad(is_write());
- if (!request.bpage)
+ if (!bpage)
{
ut_ad(!srv_read_only_mode);
- if (request.type == IORequest::DBLWR_BATCH)
- buf_dblwr.flush_buffered_writes_completed(request);
+ if (type == IORequest::DBLWR_BATCH)
+ buf_dblwr.flush_buffered_writes_completed(*this);
else
- ut_ad(request.type == IORequest::WRITE_ASYNC);
-write_completed:
- request.node->complete_write();
- }
- else if (request.is_write())
- {
- buf_page_write_complete(request);
- goto write_completed;
+ ut_ad(type == IORequest::WRITE_ASYNC);
}
else
- {
- ut_ad(request.is_read());
+ buf_page_write_complete(*this);
- /* IMPORTANT: since i/o handling for reads will read also the insert
- buffer in fil_system.sys_space, we have to be very careful not to
- introduce deadlocks. We never close fil_system.sys_space data
- files and never issue asynchronous reads of change buffer pages. */
- const page_id_t id(request.bpage->id());
+ node->complete_write();
+ node->space->release();
+}
- if (dberr_t err= request.bpage->read_complete(*request.node))
- {
- if (recv_recovery_is_on() && !srv_force_recovery)
- {
- mysql_mutex_lock(&recv_sys.mutex);
- recv_sys.set_corrupt_fs();
- mysql_mutex_unlock(&recv_sys.mutex);
- }
+void IORequest::read_complete() const
+{
+ ut_ad(fil_validate_skip());
+ ut_ad(node);
+ ut_ad(is_read());
+ ut_ad(bpage);
+
+ /* IMPORTANT: since i/o handling for reads will read also the insert
+ buffer in fil_system.sys_space, we have to be very careful not to
+ introduce deadlocks. We never close fil_system.sys_space data files
+ and never issue asynchronous reads of change buffer pages. */
+ const page_id_t id(bpage->id());
- if (err != DB_FAIL)
- ib::error() << "Failed to read page " << id.page_no()
- << " from file '" << request.node->name << "': " << err;
+ if (dberr_t err= bpage->read_complete(*node))
+ {
+ if (recv_recovery_is_on() && !srv_force_recovery)
+ {
+ mysql_mutex_lock(&recv_sys.mutex);
+ recv_sys.set_corrupt_fs();
+ mysql_mutex_unlock(&recv_sys.mutex);
}
+
+ if (err != DB_FAIL)
+ ib::error() << "Failed to read page " << id.page_no()
+ << " from file '" << node->name << "': " << err;
}
- request.node->space->release();
+ node->space->release();
}
/** Flush to disk the writes in file spaces of the given type