真正write、fsync double write到磁盘的函数
//如果不使用double write,那么fsync操作系统内容到磁盘。会有这种情况吗,调用批量函数的时候,已经排除这种情况了?
if (!srv_use_doublewrite_buf || buf_dblwr == NULL) {
/* Sync the writes to the disk. */
buf_dblwr_sync_datafiles();//fil_flush_file_spaces(FIL_TABLESPACE);-> fsync (file)
return;
}
try_again:
mutex_enter(&buf_dblwr->mutex);
//若别的线程已刷完,那么返回
if (buf_dblwr->first_free == 0) {
mutex_exit(&buf_dblwr->mutex);
return;
}
//若别的线程正在批量刷,等待,然后重试
if (buf_dblwr->batch_running) {
/* Another thread is running the batch right now. Wait for it to finish. */
ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event);
mutex_exit