diff options
author | Csaba Henk <csaba@gluster.com> | 2009-08-14 15:51:37 -0700 |
---|---|---|
committer | Csaba Henk <csaba@gluster.com> | 2009-08-14 17:25:32 -0700 |
commit | 3d894362ae0b8d346f29e9c3ea98e325d83a083a (patch) | |
tree | a15d0e0ad56801a2d93d2d8eb9cd5c2c12a143c1 | |
parent | a91679b605ffbe71fa7124964df8aea08ccba464 (diff) |
fuse: switch off direct I/O mode if big writes are supported
-rw-r--r-- | doc/user-guide/user-guide.texi | 3 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 3 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 8 |
3 files changed, 11 insertions, 3 deletions
diff --git a/doc/user-guide/user-guide.texi b/doc/user-guide/user-guide.texi index c318341ec..800354116 100644 --- a/doc/user-guide/user-guide.texi +++ b/doc/user-guide/user-guide.texi @@ -509,7 +509,8 @@ Advanced Options Attribute timeout for inodes in the kernel, in seconds. Defaults to 1 second. @item --disable-direct-io-mode - Disable direct @acronym{I/O} mode in @acronym{FUSE} kernel module. + Disable direct @acronym{I/O} mode in @acronym{FUSE} kernel module. This is set + automatically if kernel supports big writes (>= 2.6.26). @item -e, --entry-timeout=<n> Entry timeout for directory entries in the kernel, in seconds. diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index d658c0e09..2ad644e9f 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -140,7 +140,8 @@ static struct argp_option gf_options[] = { {0, 0, 0, 0, "Fuse options:"}, {"disable-direct-io-mode", ARGP_DISABLE_DIRECT_IO_MODE_KEY, 0, 0, - "Disable direct I/O mode in fuse kernel module"}, + "Disable direct I/O mode in fuse kernel module" + " [default if big writes are supported]"}, {"entry-timeout", ARGP_ENTRY_TIMEOUT_KEY, "SECONDS", 0, "Set entry timeout to SECONDS in fuse kernel module [default: 1]"}, {"attribute-timeout", ARGP_ATTRIBUTE_TIMEOUT_KEY, "SECONDS", 0, diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index d2c08b57e..d78de0dd2 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -2635,7 +2635,13 @@ fuse_init (xlator_t *this, fuse_in_header_t *finh, void *msg) fino.minor = FUSE_KERNEL_MINOR_VERSION; fino.max_readahead = 1 << 17; fino.max_write = 1 << 17; - fino.flags = FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_BIG_WRITES; + 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; + fino.flags |= FUSE_BIG_WRITES; + } ret = send_fuse_obj (this, finh, &fino); if (ret == 0) |