4111
4111
#ifdef HAVE_POSIX_FALLOCATE
4112
4112
if (srv_use_posix_fallocate) {
4113
offset_high = size_after_extend * page_size / (4ULL*1024*1024*1024);
4114
offset_low = size_after_extend * page_size % (4ULL*1024*1024*1024);
4113
ib_int64_t start_offset = start_page_no * page_size;
4114
ib_int64_t end_offset = (size_after_extend - start_page_no) * page_size;
4115
ib_int64_t desired_size = size_after_extend*page_size;
4116
4117
mutex_exit(&fil_system->mutex);
4117
success = os_file_set_size(node->name, node->handle,
4118
offset_low, offset_high);
4119
if (posix_fallocate(node->handle, start_offset, end_offset) == -1) {
4120
fprintf(stderr, "InnoDB: Error: preallocating file "
4121
"space for file \'%s\' failed. Current size "
4122
" %lld, len %lld, desired size %lld\n",
4123
node->name, start_offset, end_offset, desired_size);
4119
4129
mutex_enter(&fil_system->mutex);
4121
4132
node->size += (size_after_extend - start_page_no);
4122
4133
space->size += (size_after_extend - start_page_no);
4123
4134
os_has_said_disk_full = FALSE;
4137
fil_node_complete_io(node, fil_system, OS_FILE_READ);
4125
4138
goto complete_io;
4179
4192
mem_free(buf2);
4181
#ifdef HAVE_POSIX_FALLOCATE
4194
fil_node_complete_io(node, fil_system, OS_FILE_WRITE);
4185
fil_node_complete_io(node, fil_system, OS_FILE_WRITE);
4187
4198
*actual_size = space->size;