aboutsummaryrefslogtreecommitdiffstats
path: root/example/passthrough_ll.c
diff options
context:
space:
mode:
authorBernd Schubert <bernd.schubert@fastmail.fm>2024-02-26 09:48:04 +0100
committerGitHub <noreply@github.com>2024-02-26 09:48:04 +0100
commitf557f3677586d4e22a6208e5dc2ceea4e1999462 (patch)
tree1d907e2ee1f016f4fa379707782bab3e399a0d8f /example/passthrough_ll.c
parent74b1df2e84e836a1710561f52075d51f20cd5c78 (diff)
parentc45863318889fa6344534537c7ef91a37b3fba32 (diff)
downloadlibfuse-f557f3677586d4e22a6208e5dc2ceea4e1999462.tar.gz
Merge pull request #888 from yangyun50/master
passthrough examples: enable direct io when open has flag: O_DIRECT
Diffstat (limited to 'example/passthrough_ll.c')
-rw-r--r--example/passthrough_ll.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/example/passthrough_ll.c b/example/passthrough_ll.c
index afac6ea..46cc8e0 100644
--- a/example/passthrough_ll.c
+++ b/example/passthrough_ll.c
@@ -775,6 +775,9 @@ static void lo_create(fuse_req_t req, fuse_ino_t parent, const char *name,
else if (lo->cache == CACHE_ALWAYS)
fi->keep_cache = 1;
+ /* parallel_direct_writes feature depends on direct_io features.
+ To make parallel_direct_writes valid, need set fi->direct_io
+ in current function. */
fi->parallel_direct_writes = 1;
err = lo_do_lookup(req, parent, name, &e);
@@ -834,6 +837,15 @@ static void lo_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
else if (lo->cache == CACHE_ALWAYS)
fi->keep_cache = 1;
+ /* Enable direct_io when open has flags O_DIRECT to enjoy the feature
+ parallel_direct_writes (i.e., to get a shared lock, not exclusive lock,
+ for writes to the same file in the kernel). */
+ if (fi->flags & O_DIRECT)
+ fi->direct_io = 1;
+
+ /* parallel_direct_writes feature depends on direct_io features.
+ To make parallel_direct_writes valid, need set fi->direct_io
+ in current function. */
fi->parallel_direct_writes = 1;
fuse_reply_open(req, fi);