mariadb/mysys
Marko Mäkelä 7f7329f092 MDEV-33379 innodb_log_file_buffering=OFF causes corruption on bcachefs
Apparently, invoking fcntl(fd, F_SETFL, O_DIRECT) will lead to
unexpected behaviour on Linux bcachefs and possibly other file systems,
depending on the operating system version. So, let us avoid doing that,
and instead just attempt to pass the O_DIRECT flag to open(). This should
make us compatible with NetBSD, IBM AIX, as well as Solaris and its
derivatives.

This fix does not change the fact that we had only implemented
innodb_log_file_buffering=OFF on systems where we can determine the
physical block size (typically 512 or 4096 bytes).
Currently, those operating systems are Linux and Microsoft Windows.

HAVE_FCNTL_DIRECT, os_file_set_nocache(): Remove.

OS_FILE_OVERWRITE, OS_FILE_CREATE_PATH: Remove (never used parameters).

os_file_log_buffered(), os_file_log_maybe_unbuffered(): Helper functions.

os_file_create_simple_func(): When applicable, initially attempt to
open files in O_DIRECT mode.

os_file_create_func(): When applicable, initially attempt to
open files in O_DIRECT mode.
For type==OS_LOG_FILE && create_mode != OS_FILE_CREATE
we will first invoke stat(2) on the file name to find out if the size
is compatible with O_DIRECT. If create_mode == OS_FILE_CREATE, we will
invoke fstat(2) on the created log file afterwards, and may close and
reopen the file in O_DIRECT mode if applicable.

create_temp_file(): Support O_DIRECT. This is only used if O_TMPFILE is
available and innodb_disable_sort_file_cache=ON (non-default value).
Notably, that setting never worked on Microsoft Windows.

row_merge_file_create_mode(): Split from row_merge_file_create_low().
Create a temporary file in the specified mode.

Reviewed by: Vladislav Vaintroub
2024-02-20 11:22:45 +02:00
..
crc32 Remove unused header from crc32c.cc 2022-02-24 19:41:00 +11:00
array.c Merge 10.7 into 10.8 2023-01-10 14:42:50 +02:00
base64.c Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
ChangeLog
charset-def.c MDEV-27009 Add UCA-14.0.0 collations 2022-08-10 15:04:24 +02:00
charset.c MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8 2023-02-17 17:33:27 +04:00
CMakeLists.txt MDEV-27090 Windows client - ReadConsoleA does not work correctly with UTF8 codepage 2021-12-15 19:13:57 +01:00
crc32ieee.cc MDEV-27208: Extend CRC32() and implement CRC32C() 2022-01-21 19:24:00 +02:00
errors.c MDEV-7947 strcmp() takes 0.37% in OLTP RO 2020-07-23 10:54:33 +03:00
file_logger.c Merge 10.4 into 10.5 2021-03-05 12:54:43 +02:00
get_password.c Merge branch '10.6' into 10.9 2023-08-04 08:01:06 +02:00
guess_malloc_library.c Fixed compiler warnings in guess_malloc_library 2018-01-15 16:44:44 +02:00
hash.c Merge 10.6 into 10.7 2023-01-10 13:58:03 +02:00
lf_alloc-pin.c Merge commit '10.4' into 10.5 2023-07-20 11:54:52 +02:00
lf_dynarray.c perfschema memory related instrumentation changes 2020-03-10 19:24:22 +01:00
lf_hash.cc MDEV-27088: Server crash on ARM (WMM architecture) due to missing barriers in lf-hash (10.5) 2021-11-30 15:16:16 +11:00
list.c Merge 10.4 into 10.5 2020-05-13 14:25:06 +03:00
ma_dyncol.c Merge branch '10.5' into 10.6 2023-11-08 15:57:05 +01:00
mf_arr_appstr.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_cache.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
mf_dirname.c MDEV-21581 Helper functions and methods for CHARSET_INFO 2020-01-28 12:29:23 +04:00
mf_fn_ext.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
mf_format.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
mf_getdate.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_iocache.c Merge 10.5 into 10.6 2021-06-21 17:49:33 +03:00
mf_iocache2.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00
mf_keycache.c Merge 10.5 into 10.6 2022-09-26 14:34:43 +03:00
mf_keycaches.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_loadpath.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_pack.c MDEV-21581 Helper functions and methods for CHARSET_INFO 2020-01-28 12:29:23 +04:00
mf_path.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
mf_qsort.c fix clang build: check alignment the other way 2021-07-26 12:37:25 +03:00
mf_qsort2.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_radix.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
mf_same.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_sort.c perfschema memory related instrumentation changes 2020-03-10 19:24:22 +01:00
mf_soundex.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_tempdir.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
mf_tempfile.c MDEV-33379 innodb_log_file_buffering=OFF causes corruption on bcachefs 2024-02-20 11:22:45 +02:00
mf_unixpath.c Update FSF Address 2019-05-11 21:29:06 +03:00
mf_wcomp.c Update FSF Address 2019-05-11 21:29:06 +03:00
mulalloc.c Added detection of memory overwrite with multi_malloc 2023-02-27 19:25:44 +02:00
my_access.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_addr_resolve.c Backport my_addr_resolve from 10.6 to get latest bug fixes in. 2023-11-27 19:08:14 +02:00
my_alarm.c Update FSF Address 2019-05-11 21:29:06 +03:00
my_alloc.c Merge branch '10.6' into 10.11 2023-12-18 11:19:04 +01:00
my_atomic_writes.c Merge 10.5 into 10.6 2023-04-11 16:15:19 +03:00
my_basename.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00
my_bit.c Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
my_bitmap.c cleanup: MY_BITMAP mutex 2021-08-26 23:39:52 +02:00
my_chmod.c Merge branch '5.5' into 10.1 2019-05-11 19:15:57 +03:00
my_chsize.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
my_compare.c Merge branch '10.4' into 10.5 2023-11-08 12:59:00 +01:00
my_compress.c Cleanup: Remove IF_VALGRIND 2022-04-25 09:40:40 +03:00
my_copy.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_cpu.c MDEV-19845: Make my_cpu.h self-contained 2020-02-01 14:56:05 +02:00
my_create.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
my_default.c Merge branch '10.6' into 10.9 2023-08-04 08:01:06 +02:00
my_delete.c Merge 10.6 into 10.7 2022-12-13 18:01:49 +02:00
my_div.c Update FSF Address 2019-05-11 21:29:06 +03:00
my_dlerror.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
my_error.c Merge branch '10.4' into 10.5 2020-11-01 14:26:15 +01:00
my_file.c perfschema memory related instrumentation changes 2020-03-10 19:24:22 +01:00
my_fopen.c MDEV-27142 - postfix 2022-11-04 13:50:36 +01:00
my_fstream.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
my_gethwaddr.c OS detection logic in my_gethwaddr.c is backwards 2022-11-13 13:12:37 +11:00
my_getncpus.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_getopt.c Merge 10.6 into 10.10 2023-10-14 13:36:11 +03:00
my_getpagesize.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_getsystime.c Windows : fix warning about potential division by 0 2021-05-09 13:26:03 +02:00
my_getwd.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_init.c MDEV-27142 disable text mode for Windows stdio by default 2022-07-18 13:18:03 +02:00
my_largepage.c Merge 10.6 into 10.10 2023-10-14 13:36:11 +03:00
my_lib.c MDEV-24841: More workarounds 2022-03-14 10:37:39 +02:00
my_libwrap.c Update FSF Address 2019-05-11 21:29:06 +03:00
my_likely.c Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
my_lock.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
my_lockmem.c Merge 10.6 into 10.10 2023-10-14 13:36:11 +03:00
my_malloc.c Merge 10.6 into 10.10 2023-10-14 13:36:11 +03:00
my_memmem.c Update FSF Address 2019-05-11 21:29:06 +03:00
my_mess.c MDEV-23846: O_TMPFILE error in mysqlbinlog stream output breaks restore 2020-11-23 12:16:45 +05:30
my_minidump.cc MDEV-11499 mysqltest, Windows : improve diagnostics if server fails to shutdown 2021-09-24 11:49:28 +02:00
my_mkdir.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_mmap.c libpmem cmake macros 2020-02-04 23:23:50 +04:00
my_new.cc Fixes that enables my_new.cc (new wrapper using my_malloc) 2021-05-19 22:27:27 +02:00
my_once.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
my_open.c Added checking to protect against simultaneous double free in safemalloc 2021-05-19 22:54:14 +02:00
my_port.c Follow-up to changing FSF address 2019-05-11 18:30:45 +03:00
my_pread.c Merge 10.3 into 10.4 2019-06-19 10:49:00 +03:00
my_pthread.c Merge 10.5 into 10.6 2022-10-25 14:25:42 +03:00
my_quick.c Update FSF Address 2019-05-11 21:29:06 +03:00
my_rdtsc.c MDEV-30411: Fix my_timer_init() to match the code in as my_timer_cycles() 2023-04-27 14:42:04 +10:00
my_read.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
my_redel.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_rename.c Merge 10.5 into 10.6 2022-12-13 16:58:58 +02:00
my_rnd.c remove dead code 2022-07-31 14:54:37 +02:00
my_safehash.c cleanup: PSI key is *always* the first argument 2020-03-10 19:24:23 +01:00
my_safehash.h Update FSF address 2019-05-10 20:52:00 +03:00
my_seek.c myseek: AIX has no "tell" 2021-03-19 11:14:53 +11:00
my_setuser.c mysys: rename ME_xxx flags to match plugin api 2018-06-04 12:32:23 +02:00
my_sleep.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_static.c Fixes that enables my_new.cc (new wrapper using my_malloc) 2021-05-19 22:27:27 +02:00
my_static.h Update FSF Address 2019-05-11 21:29:06 +03:00
my_symlink.c MDEV-24841 Build error with MSAN use-of-uninitialized-value in comp_err 2022-03-14 09:28:55 +02:00
my_symlink2.c MDEV-11412 Ensure that table is truly dropped when using DROP TABLE 2020-06-14 19:39:42 +03:00
my_sync.c MDEV-381: fdatasync() does not correctly flush growing binlog file 2023-08-10 19:52:04 +02:00
my_thr_init.c fix ASAN+safemalloc builds 2023-07-04 16:37:29 +02:00
my_uuid.c cleanup: uuid 2021-10-29 18:29:01 +02:00
my_win_popen.cc Ensure that source files contain only valid UTF8 encodings (#2188) 2023-05-19 13:21:34 +01:00
my_wincond.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
my_winerr.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00
my_winfile.c Merge 10.5 into 10.6 2022-12-13 16:58:58 +02:00
my_winthread.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00
my_wintoken.c Merge pull request #1221 from grooverdan/10.4-MDEV-18851-multiple-sized-large-page-support 2020-04-02 23:54:08 +04:00
my_write.c Merge branch '10.3' into 10.4 2019-05-19 20:55:37 +02:00
mysys_priv.h Merge 10.5 into 10.6 2022-12-13 16:58:58 +02:00
psi_noop.c Merge branch 'merge-perfschema-5.7' into 10.5 2022-08-02 09:34:15 +02:00
ptr_cmp.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00
queues.c Merge 10.4 into 10.5 2020-05-05 21:16:22 +03:00
safemalloc.c Merge branch '10.5' into 10.6 2023-12-17 11:20:43 +01:00
stacktrace.c MDEV-30573 Server doesn't build with GCOV by GCC 11+ 2023-02-06 21:25:02 +11:00
string.c MDEV-25602 get rid of __WIN__ in favor of standard _WIN32 2021-06-06 13:21:03 +02:00
test_charset.c MDEV-8334: Rename utf8 to utf8mb3 2021-05-19 06:48:36 +02:00
test_dir.c Update FSF Address 2019-05-11 21:29:06 +03:00
test_thr_mutex.c Update FSF address 2019-05-10 20:52:00 +03:00
test_xml.c Update FSF Address 2019-05-11 21:29:06 +03:00
testhash.c Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
thr_alarm.c Merge branch '10.5' into 10.6 2024-01-11 12:59:22 +11:00
thr_lock.c Merge branch '10.5' into 10.6 2024-01-11 12:59:22 +11:00
thr_mutex.c Merge branch '10.6' into 10.11 2024-02-01 18:36:14 +01:00
thr_rwlock.c MDEV-19773 : simplify implementation of Windows rwlock 2019-06-18 00:37:09 +01:00
thr_timer.c MDEV-33092 Undefined reference to concurrency on Solaris 2024-01-10 10:16:20 +01:00
tree.c perfschema memory related instrumentation changes 2020-03-10 19:24:22 +01:00
typelib.c Added 'const' to arguments in get_one_option and find_typeset() 2021-02-08 12:16:29 +02:00
waiting_threads.c MDEV-26221: DYNAMIC_ARRAY use size_t for sizes 2021-10-19 16:00:26 +03:00
wqueue.c Merge 10.2 into 10.3 2019-05-14 17:18:46 +03:00