MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
os0file.h
Go to the documentation of this file.
1 /***********************************************************************
2 
3 Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
4 Copyright (c) 2009, Percona Inc.
5 
6 Portions of this file contain modifications contributed and copyrighted
7 by Percona Inc.. Those modifications are
8 gratefully acknowledged and are described briefly in the InnoDB
9 documentation. The contributions by Percona Inc. are incorporated with
10 their permission, and subject to the conditions contained in the file
11 COPYING.Percona.
12 
13 This program is free software; you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by the
15 Free Software Foundation; version 2 of the License.
16 
17 This program is distributed in the hope that it will be useful, but
18 WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
20 Public License for more details.
21 
22 You should have received a copy of the GNU General Public License along with
23 this program; if not, write to the Free Software Foundation, Inc.,
24 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
25 
26 ***********************************************************************/
27 
28 /**************************************************/
35 #ifndef os0file_h
36 #define os0file_h
37 
38 #include "univ.i"
39 
40 #ifndef __WIN__
41 #include <dirent.h>
42 #include <sys/stat.h>
43 #include <time.h>
44 #endif
45 
47 struct fil_node_t;
48 
49 extern ibool os_has_said_disk_full;
51 extern ibool os_aio_print_debug;
52 
54 extern ulint os_file_n_pending_preads;
56 extern ulint os_file_n_pending_pwrites;
57 
59 extern ulint os_n_pending_reads;
61 extern ulint os_n_pending_writes;
62 
63 #ifdef __WIN__
64 
67 #define WIN_ASYNC_IO
68 
70 #define UNIV_NON_BUFFERED_IO
71 
72 #endif
73 
75 typedef ib_uint64_t os_offset_t;
76 #ifdef __WIN__
77 
78 # define os_file_t HANDLE
79 
82 # define OS_FILE_FROM_FD(fd) (HANDLE) _get_osfhandle(fd)
83 #else
84 
85 typedef int os_file_t;
89 # define OS_FILE_FROM_FD(fd) fd
90 #endif
91 
93 extern ulint os_innodb_umask;
94 
102 #define OS_FILE_LOG_BLOCK_SIZE 512
103 
125 };
126 
127 #define OS_FILE_READ_ONLY 333
128 #define OS_FILE_READ_WRITE 444
129 #define OS_FILE_READ_ALLOW_DELETE 555 /* for ibbackup */
130 
131 /* Options for file_create */
132 #define OS_FILE_AIO 61
133 #define OS_FILE_NORMAL 62
134 /* @} */
135 
137 #define OS_DATA_FILE 100
138 #define OS_LOG_FILE 101
139 /* @} */
140 
142 #define OS_FILE_NOT_FOUND 71
143 #define OS_FILE_DISK_FULL 72
144 #define OS_FILE_ALREADY_EXISTS 73
145 #define OS_FILE_PATH_ERROR 74
146 #define OS_FILE_AIO_RESOURCES_RESERVED 75 /* wait for OS aio resources
147  to become available again */
148 #define OS_FILE_SHARING_VIOLATION 76
149 #define OS_FILE_ERROR_NOT_SPECIFIED 77
150 #define OS_FILE_INSUFFICIENT_RESOURCE 78
151 #define OS_FILE_AIO_INTERRUPTED 79
152 #define OS_FILE_OPERATION_ABORTED 80
153 /* @} */
154 
156 #define OS_FILE_READ 10
157 #define OS_FILE_WRITE 11
158 
159 #define OS_FILE_LOG 256 /* This can be ORed to type */
160 /* @} */
162 #define OS_AIO_N_PENDING_IOS_PER_THREAD 32
166 #define OS_AIO_NORMAL 21
168 #define OS_AIO_IBUF 22
170 #define OS_AIO_LOG 23
171 #define OS_AIO_SYNC 24
181 #define OS_AIO_SIMULATED_WAKE_LATER 512
187 /* @} */
189 #define OS_WIN31 1
190 #define OS_WIN95 2
191 #define OS_WINNT 3
192 #define OS_WIN2000 4
193 #define OS_WINXP 5
195 #define OS_WINVISTA 6
197 #define OS_WIN7 7
201 extern ulint os_n_file_reads;
202 extern ulint os_n_file_writes;
203 extern ulint os_n_fsyncs;
204 
205 #ifdef UNIV_PFS_IO
206 /* Keys to register InnoDB I/O with performance schema */
207 extern mysql_pfs_key_t innodb_file_data_key;
208 extern mysql_pfs_key_t innodb_file_log_key;
209 extern mysql_pfs_key_t innodb_file_temp_key;
210 
211 /* Following four macros are instumentations to register
212 various file I/O operations with performance schema.
213 1) register_pfs_file_open_begin() and register_pfs_file_open_end() are
214 used to register file creation, opening, closing and renaming.
215 2) register_pfs_file_io_begin() and register_pfs_file_io_end() are
216 used to register actual file read, write and flush
217 3) register_pfs_file_close_begin() and register_pfs_file_close_end()
218 are used to register file deletion operations*/
219 # define register_pfs_file_open_begin(state, locker, key, op, name, \
220  src_file, src_line) \
221 do { \
222  locker = PSI_FILE_CALL(get_thread_file_name_locker)( \
223  state, key, op, name, &locker); \
224  if (UNIV_LIKELY(locker != NULL)) { \
225  PSI_FILE_CALL(start_file_open_wait)( \
226  locker, src_file, src_line); \
227  } \
228 } while (0)
229 
230 # define register_pfs_file_open_end(locker, file) \
231 do { \
232  if (UNIV_LIKELY(locker != NULL)) { \
233  PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(\
234  locker, file); \
235  } \
236 } while (0)
237 
238 # define register_pfs_file_close_begin(state, locker, key, op, name, \
239  src_file, src_line) \
240 do { \
241  locker = PSI_FILE_CALL(get_thread_file_name_locker)( \
242  state, key, op, name, &locker); \
243  if (UNIV_LIKELY(locker != NULL)) { \
244  PSI_FILE_CALL(start_file_close_wait)( \
245  locker, src_file, src_line); \
246  } \
247 } while (0)
248 
249 # define register_pfs_file_close_end(locker, result) \
250 do { \
251  if (UNIV_LIKELY(locker != NULL)) { \
252  PSI_FILE_CALL(end_file_close_wait)( \
253  locker, result); \
254  } \
255 } while (0)
256 
257 # define register_pfs_file_io_begin(state, locker, file, count, op, \
258  src_file, src_line) \
259 do { \
260  locker = PSI_FILE_CALL(get_thread_file_descriptor_locker)( \
261  state, file, op); \
262  if (UNIV_LIKELY(locker != NULL)) { \
263  PSI_FILE_CALL(start_file_wait)( \
264  locker, count, src_file, src_line); \
265  } \
266 } while (0)
267 
268 # define register_pfs_file_io_end(locker, count) \
269 do { \
270  if (UNIV_LIKELY(locker != NULL)) { \
271  PSI_FILE_CALL(end_file_wait)(locker, count); \
272  } \
273 } while (0)
274 #endif /* UNIV_PFS_IO */
275 
276 /* Following macros/functions are file I/O APIs that would be performance
277 schema instrumented if "UNIV_PFS_IO" is defined. They would point to
278 wrapper functions with performance schema instrumentation in such case.
279 
280 os_file_create
281 os_file_create_simple
282 os_file_create_simple_no_error_handling
283 os_file_close
284 os_file_rename
285 os_aio
286 os_file_read
287 os_file_read_no_error_handling
288 os_file_write
289 
290 The wrapper functions have the prefix of "innodb_". */
291 
292 #ifdef UNIV_PFS_IO
293 # define os_file_create(key, name, create, purpose, type, success) \
294  pfs_os_file_create_func(key, name, create, purpose, type, \
295  success, __FILE__, __LINE__)
296 
297 # define os_file_create_simple(key, name, create, access, success) \
298  pfs_os_file_create_simple_func(key, name, create, access, \
299  success, __FILE__, __LINE__)
300 
301 # define os_file_create_simple_no_error_handling( \
302  key, name, create_mode, access, success) \
303  pfs_os_file_create_simple_no_error_handling_func( \
304  key, name, create_mode, access, success, __FILE__, __LINE__)
305 
306 # define os_file_close(file) \
307  pfs_os_file_close_func(file, __FILE__, __LINE__)
308 
309 # define os_aio(type, mode, name, file, buf, offset, \
310  n, message1, message2) \
311  pfs_os_aio_func(type, mode, name, file, buf, offset, \
312  n, message1, message2, __FILE__, __LINE__)
313 
314 # define os_file_read(file, buf, offset, n) \
315  pfs_os_file_read_func(file, buf, offset, n, __FILE__, __LINE__)
316 
317 # define os_file_read_no_error_handling(file, buf, offset, n) \
318  pfs_os_file_read_no_error_handling_func(file, buf, offset, n, \
319  __FILE__, __LINE__)
320 
321 # define os_file_write(name, file, buf, offset, n) \
322  pfs_os_file_write_func(name, file, buf, offset, \
323  n, __FILE__, __LINE__)
324 
325 # define os_file_flush(file) \
326  pfs_os_file_flush_func(file, __FILE__, __LINE__)
327 
328 # define os_file_rename(key, oldpath, newpath) \
329  pfs_os_file_rename_func(key, oldpath, newpath, __FILE__, __LINE__)
330 
331 # define os_file_delete(key, name) \
332  pfs_os_file_delete_func(key, name, __FILE__, __LINE__)
333 
334 # define os_file_delete_if_exists(key, name) \
335  pfs_os_file_delete_if_exists_func(key, name, __FILE__, __LINE__)
336 #else /* UNIV_PFS_IO */
337 
338 /* If UNIV_PFS_IO is not defined, these I/O APIs point
339 to original un-instrumented file I/O APIs */
340 # define os_file_create(key, name, create, purpose, type, success) \
341  os_file_create_func(name, create, purpose, type, success)
342 
343 # define os_file_create_simple(key, name, create_mode, access, success) \
344  os_file_create_simple_func(name, create_mode, access, success)
345 
346 # define os_file_create_simple_no_error_handling( \
347  key, name, create_mode, access, success) \
348  os_file_create_simple_no_error_handling_func( \
349  name, create_mode, access, success)
350 
351 # define os_file_close(file) os_file_close_func(file)
352 
353 # define os_aio(type, mode, name, file, buf, offset, n, message1, message2) \
354  os_aio_func(type, mode, name, file, buf, offset, n, \
355  message1, message2)
356 
357 # define os_file_read(file, buf, offset, n) \
358  os_file_read_func(file, buf, offset, n)
359 
360 # define os_file_read_no_error_handling(file, buf, offset, n) \
361  os_file_read_no_error_handling_func(file, buf, offset, n)
362 
363 # define os_file_write(name, file, buf, offset, n) \
364  os_file_write_func(name, file, buf, offset, n)
365 
366 # define os_file_flush(file) os_file_flush_func(file)
367 
368 # define os_file_rename(key, oldpath, newpath) \
369  os_file_rename_func(oldpath, newpath)
370 
371 # define os_file_delete(key, name) os_file_delete_func(name)
372 
373 # define os_file_delete_if_exists(key, name) \
374  os_file_delete_if_exists_func(name)
375 
376 #endif /* UNIV_PFS_IO */
377 
378 /* File types for directory entry data type */
379 
380 enum os_file_type_t {
381  OS_FILE_TYPE_UNKNOWN = 0,
382  OS_FILE_TYPE_FILE, /* regular file */
383  OS_FILE_TYPE_DIR, /* directory */
384  OS_FILE_TYPE_LINK /* symbolic link */
385 };
386 
387 /* Maximum path string length in bytes when referring to tables with in the
388 './databasename/tablename.ibd' path format; we can allocate at least 2 buffers
389 of this size from the thread stack; that is why this should not be made much
390 bigger than 4000 bytes */
391 #define OS_FILE_MAX_PATH 4000
392 
395  char name[OS_FILE_MAX_PATH];
396  os_file_type_t type;
397  ib_int64_t size;
398  time_t ctime;
399  time_t mtime;
400  time_t atime;
401  bool rw_perm;
404 };
405 
406 #ifdef __WIN__
407 typedef HANDLE os_file_dir_t;
408 #else
409 typedef DIR* os_file_dir_t;
410 #endif
411 
412 #ifdef __WIN__
413 /***********************************************************************/
417 UNIV_INTERN
418 ulint
419 os_get_os_version(void);
420 /*===================*/
421 #endif /* __WIN__ */
422 #ifndef UNIV_HOTBACKUP
423 /****************************************************************/
425 UNIV_INTERN
426 void
427 os_io_init_simple(void);
428 /*===================*/
429 /***********************************************************************/
434 FILE*
436 /*========================*/
437 #endif /* !UNIV_HOTBACKUP */
438 /***********************************************************************/
444 UNIV_INTERN
447 /*============*/
448  const char* dirname,
450  ibool error_is_fatal);
455 /***********************************************************************/
458 UNIV_INTERN
459 int
461 /*=============*/
462  os_file_dir_t dir);
463 /***********************************************************************/
467 UNIV_INTERN
468 int
470 /*======================*/
471  const char* dirname,
472  os_file_dir_t dir,
473  os_file_stat_t* info);
474 /*****************************************************************/
480 UNIV_INTERN
481 ibool
483 /*=====================*/
484  const char* pathname,
486  ibool fail_if_exists);
488 /****************************************************************/
494 UNIV_INTERN
495 os_file_t
497 /*=======================*/
498  const char* name,
500  ulint create_mode,
501  ulint access_type,
503  ibool* success);
504 /****************************************************************/
510 UNIV_INTERN
511 os_file_t
513 /*=========================================*/
514  const char* name,
516  ulint create_mode,
517  ulint access_type,
521  ibool* success)
522  __attribute__((nonnull, warn_unused_result));
523 /****************************************************************/
525 UNIV_INTERN
526 void
528 /*================*/
529  int fd,
530  const char* file_name,
532  const char* operation_name);
534 /****************************************************************/
540 UNIV_INTERN
541 os_file_t
543 /*================*/
544  const char* name,
546  ulint create_mode,
547  ulint purpose,
554  ulint type,
555  ibool* success)
556  __attribute__((nonnull, warn_unused_result));
557 /***********************************************************************/
560 UNIV_INTERN
561 bool
563 /*================*/
564  const char* name);
567 /***********************************************************************/
570 UNIV_INTERN
571 bool
573 /*==========================*/
574  const char* name);
576 /***********************************************************************/
582 UNIV_INTERN
583 ibool
585 /*================*/
586  const char* oldpath,
588  const char* newpath);
589 /***********************************************************************/
595 UNIV_INTERN
596 ibool
598 /*===============*/
599  os_file_t file);
601 #ifdef UNIV_PFS_IO
602 /****************************************************************/
609 UNIV_INLINE
610 os_file_t
611 pfs_os_file_create_simple_func(
612 /*===========================*/
613  mysql_pfs_key_t key,
614  const char* name,
616  ulint create_mode,
617  ulint access_type,
619  ibool* success,
620  const char* src_file,
621  ulint src_line)
622  __attribute__((nonnull, warn_unused_result));
623 
624 /****************************************************************/
632 UNIV_INLINE
633 os_file_t
634 pfs_os_file_create_simple_no_error_handling_func(
635 /*=============================================*/
636  mysql_pfs_key_t key,
637  const char* name,
639  ulint create_mode,
640  ulint access_type,
644  ibool* success,
645  const char* src_file,
646  ulint src_line)
647  __attribute__((nonnull, warn_unused_result));
648 
649 /****************************************************************/
656 UNIV_INLINE
657 os_file_t
658 pfs_os_file_create_func(
659 /*====================*/
660  mysql_pfs_key_t key,
661  const char* name,
663  ulint create_mode,
664  ulint purpose,
671  ulint type,
672  ibool* success,
673  const char* src_file,
674  ulint src_line)
675  __attribute__((nonnull, warn_unused_result));
676 
677 /***********************************************************************/
682 UNIV_INLINE
683 ibool
684 pfs_os_file_close_func(
685 /*===================*/
686  os_file_t file,
687  const char* src_file,
688  ulint src_line);
689 /*******************************************************************/
695 UNIV_INLINE
696 ibool
697 pfs_os_file_read_func(
698 /*==================*/
699  os_file_t file,
700  void* buf,
702  ulint n,
703  const char* src_file,
704  ulint src_line);
706 /*******************************************************************/
713 UNIV_INLINE
714 ibool
715 pfs_os_file_read_no_error_handling_func(
716 /*====================================*/
717  os_file_t file,
718  void* buf,
720  ulint n,
721  const char* src_file,
722  ulint src_line);
724 /*******************************************************************/
730 UNIV_INLINE
731 ibool
732 pfs_os_aio_func(
733 /*============*/
734  ulint type,
735  ulint mode,
736  const char* name,
738  os_file_t file,
739  void* buf,
742  ulint n,
743  fil_node_t* message1,
747  void* message2,
751  const char* src_file,
752  ulint src_line);
753 /*******************************************************************/
759 UNIV_INLINE
760 ibool
761 pfs_os_file_write_func(
762 /*===================*/
763  const char* name,
765  os_file_t file,
766  const void* buf,
768  ulint n,
769  const char* src_file,
770  ulint src_line);
771 /***********************************************************************/
778 UNIV_INLINE
779 ibool
780 pfs_os_file_flush_func(
781 /*===================*/
782  os_file_t file,
783  const char* src_file,
784  ulint src_line);
786 /***********************************************************************/
792 UNIV_INLINE
793 ibool
794 pfs_os_file_rename_func(
795 /*====================*/
796  mysql_pfs_key_t key,
797  const char* oldpath,
799  const char* newpath,
800  const char* src_file,
801  ulint src_line);
803 /***********************************************************************/
809 UNIV_INLINE
810 bool
811 pfs_os_file_delete_func(
812 /*====================*/
813  mysql_pfs_key_t key,
814  const char* name,
816  const char* src_file,
817  ulint src_line);
819 /***********************************************************************/
825 UNIV_INLINE
826 bool
827 pfs_os_file_delete_if_exists_func(
828 /*==============================*/
829  mysql_pfs_key_t key,
830  const char* name,
832  const char* src_file,
833  ulint src_line);
834 #endif /* UNIV_PFS_IO */
835 
836 #ifdef UNIV_HOTBACKUP
837 /***********************************************************************/
840 UNIV_INTERN
841 ibool
842 os_file_close_no_error_handling(
843 /*============================*/
844  os_file_t file);
845 #endif /* UNIV_HOTBACKUP */
846 /***********************************************************************/
849 UNIV_INTERN
852 /*=============*/
853  os_file_t file)
854  __attribute__((warn_unused_result));
855 /***********************************************************************/
858 UNIV_INTERN
859 ibool
861 /*=============*/
862  const char* name,
864  os_file_t file,
865  os_offset_t size)
866  __attribute__((nonnull, warn_unused_result));
867 /***********************************************************************/
870 UNIV_INTERN
871 ibool
873 /*============*/
874  FILE* file);
875 /***********************************************************************/
879 UNIV_INTERN
880 ibool
882 /*===============*/
883  os_file_t file);
884 /***********************************************************************/
890 UNIV_INTERN
891 ulint
893 /*===================*/
894  bool report_all_errors);
896 /*******************************************************************/
900 UNIV_INTERN
901 ibool
903 /*==============*/
904  os_file_t file,
905  void* buf,
907  ulint n);
908 /*******************************************************************/
912 UNIV_INTERN
913 void
915 /*================*/
916  FILE* file,
917  char* str,
918  ulint size);
919 /*******************************************************************/
925 UNIV_INTERN
926 ibool
928 /*================================*/
929  os_file_t file,
930  void* buf,
932  ulint n);
934 /*******************************************************************/
939 UNIV_INTERN
940 ibool
942 /*===============*/
943  const char* name,
945  os_file_t file,
946  const void* buf,
948  ulint n);
949 /*******************************************************************/
952 UNIV_INTERN
953 ibool
955 /*===========*/
956  const char* path,
957  ibool* exists,
958  os_file_type_t* type);
959 /****************************************************************/
987 UNIV_INTERN
988 char*
990 /*============*/
991  const char* path);
992 /****************************************************************/
1003 UNIV_INTERN
1004 char*
1006 /*======================*/
1007  const char* old_path,
1008  const char* new_name);
1009 /****************************************************************/
1022 UNIV_INTERN
1023 char*
1025 /*=========================*/
1026  const char* data_dir_path,
1027  const char* tablename,
1028  const char* extention);
1029 /****************************************************************/
1041 UNIV_INTERN
1042 void
1044 /*========================*/
1045  char* data_dir_path);
1046 /****************************************************************/
1049 UNIV_INTERN
1050 ibool
1052 /*=============================*/
1053  const char* path);
1054 /***********************************************************************
1055 Initializes the asynchronous io system. Creates one array each for ibuf
1056 and log i/o. Also creates one array each for read and write where each
1057 array is divided logically into n_read_segs and n_write_segs
1058 respectively. The caller must create an i/o handler thread for each
1059 segment in these arrays. This function also creates the sync array.
1060 No i/o handler thread needs to be created for that */
1061 UNIV_INTERN
1062 ibool
1063 os_aio_init(
1064 /*========*/
1065  ulint n_per_seg, /*<! in: maximum number of pending aio
1066  operations allowed per segment */
1067  ulint n_read_segs, /*<! in: number of reader threads */
1068  ulint n_write_segs, /*<! in: number of writer threads */
1069  ulint n_slots_sync); /*<! in: number of slots in the sync aio
1070  array */
1071 /***********************************************************************
1072 Frees the asynchronous io system. */
1073 UNIV_INTERN
1074 void
1075 os_aio_free(void);
1076 /*=============*/
1077 
1078 /*******************************************************************/
1082 UNIV_INTERN
1083 ibool
1084 os_aio_func(
1085 /*========*/
1086  ulint type,
1087  ulint mode,
1100  const char* name,
1102  os_file_t file,
1103  void* buf,
1106  ulint n,
1107  fil_node_t* message1,
1111  void* message2);
1115 /************************************************************************/
1118 UNIV_INTERN
1119 void
1121 /*=====================================*/
1122 /************************************************************************/
1125 UNIV_INTERN
1126 void
1128 /*=====================================*/
1129 /**********************************************************************/
1131 UNIV_INTERN
1132 void
1134 /*=======================================*/
1135 /**********************************************************************/
1140 UNIV_INTERN
1141 void
1143 /*============================================*/
1144 
1145 #ifdef WIN_ASYNC_IO
1146 /**********************************************************************/
1154 UNIV_INTERN
1155 ibool
1156 os_aio_windows_handle(
1157 /*==================*/
1158  ulint segment,
1166  ulint pos,
1168  fil_node_t**message1,
1173  void** message2,
1174  ulint* type);
1175 #endif
1176 
1177 /**********************************************************************/
1181 UNIV_INTERN
1182 ibool
1184 /*====================*/
1185  ulint segment,
1190  fil_node_t**message1,
1195  void** message2,
1196  ulint* type);
1197 /**********************************************************************/
1200 UNIV_INTERN
1201 ibool
1202 os_aio_validate(void);
1203 /*=================*/
1204 /**********************************************************************/
1206 UNIV_INTERN
1207 void
1208 os_aio_print(
1209 /*=========*/
1210  FILE* file);
1211 /**********************************************************************/
1213 UNIV_INTERN
1214 void
1215 os_aio_refresh_stats(void);
1216 /*======================*/
1217 
1218 #ifdef UNIV_DEBUG
1219 /**********************************************************************/
1222 UNIV_INTERN
1223 ibool
1224 os_aio_all_slots_free(void);
1225 /*=======================*/
1226 #endif /* UNIV_DEBUG */
1227 
1228 /*******************************************************************/
1231 UNIV_INTERN
1232 dberr_t
1234 /*===============*/
1235  const char* path,
1236  os_file_stat_t* stat_info,
1238  bool check_rw_perm);
1241 #if !defined(UNIV_HOTBACKUP)
1242 /*********************************************************************/
1246 UNIV_INTERN
1247 int
1249 /*========================*/
1250 #endif /* !UNIV_HOTBACKUP */
1251 
1252 
1253 #if defined(LINUX_NATIVE_AIO)
1254 /**************************************************************************
1255 This function is only used in Linux native asynchronous i/o.
1256 Waits for an aio operation to complete. This function is used to wait the
1257 for completed requests. The aio array of pending requests is divided
1258 into segments. The thread specifies which segment or slot it wants to wait
1259 for. NOTE: this function will also take care of freeing the aio slot,
1260 therefore no other thread is allowed to do the freeing!
1261 @return TRUE if the IO was successful */
1262 UNIV_INTERN
1263 ibool
1264 os_aio_linux_handle(
1265 /*================*/
1266  ulint global_seg,
1272  fil_node_t**message1,
1273  void** message2,
1277  ulint* type);
1278 #endif /* LINUX_NATIVE_AIO */
1279 
1280 #ifndef UNIV_NONINL
1281 #include "os0file.ic"
1282 #endif
1283 
1284 #endif