diff options
Diffstat (limited to 'src/os_win/os_open.c')
-rw-r--r-- | src/os_win/os_open.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/os_win/os_open.c b/src/os_win/os_open.c index c7b30408e63..c3106763452 100644 --- a/src/os_win/os_open.c +++ b/src/os_win/os_open.c @@ -78,11 +78,20 @@ __wt_open(WT_SESSION_IMPL *session, } else dwCreationDisposition = OPEN_EXISTING; + /* + * direct_io means no OS file caching. This requires aligned buffer + * allocations like O_DIRECT. + */ if (dio_type && FLD_ISSET(conn->direct_io, dio_type)) { - f |= FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH; + f |= FILE_FLAG_NO_BUFFERING; direct_io = true; } + /* FILE_FLAG_WRITE_THROUGH does not require aligned buffers */ + if (dio_type && FLD_ISSET(conn->write_through, dio_type)) { + f |= FILE_FLAG_WRITE_THROUGH; + } + if (dio_type == WT_FILE_TYPE_LOG && FLD_ISSET(conn->txn_logsync, WT_LOG_DSYNC)) { f |= FILE_FLAG_WRITE_THROUGH; |