summaryrefslogtreecommitdiff
path: root/src/os_win/os_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os_win/os_open.c')
-rw-r--r--src/os_win/os_open.c11
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;