diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index a51cf6eed98..b01bf4cdffc 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -833,8 +833,9 @@ fuse_fd_cbk (call_frame_t *frame, void *cookie, xlator_t *this, foo.open_flags = 0; if (!S_ISDIR (fd->inode->st_mode)) { - if (((state->flags & O_ACCMODE) != O_RDONLY) && - priv->direct_io_mode) + if (((priv->direct_io_mode == 2) + && ((state->flags & O_ACCMODE) != O_RDONLY)) + || (priv->direct_io_mode == 1)) foo.open_flags |= FOPEN_DIRECT_IO; } @@ -1648,8 +1649,9 @@ fuse_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (op_ret >= 0) { foo.fh = (uintptr_t) fd; - if (((state->flags & O_ACCMODE) != O_RDONLY) && - priv->direct_io_mode) + if (((priv->direct_io_mode == 2) + && ((state->flags & O_ACCMODE) != O_RDONLY)) + || (priv->direct_io_mode == 1)) foo.open_flags |= FOPEN_DIRECT_IO; gf_log ("glusterfs-fuse", GF_LOG_TRACE, @@ -2920,8 +2922,14 @@ fuse_init (xlator_t *this, fuse_in_header_t *finh, void *msg) fino.flags = FUSE_ASYNC_READ | FUSE_POSIX_LOCKS; if (fini->minor >= 6 /* fuse_init_in has flags */ && fini->flags & FUSE_BIG_WRITES) { - /* no need for direct I/O mode if big writes are supported */ - priv->direct_io_mode = 0; + /* + * no need for direct I/O mode by default if big writes are + * supported + */ + if (priv->direct_io_mode == 2) { + priv->direct_io_mode = 0; + } + fino.flags |= FUSE_BIG_WRITES; } if (fini->minor >= 13) { @@ -3422,7 +3430,7 @@ init (xlator_t *this_xl) priv->entry_timeout = 1.0; /* default */ - priv->direct_io_mode = 1; + priv->direct_io_mode = 2; ret = dict_get_str (options, ZR_DIRECT_IO_OPT, &value_string); if (value_string) { ret = gf_string2boolean (value_string, &priv->direct_io_mode); |