aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorNikolaus Rath <Nikolaus@rath.org>2022-03-14 09:48:43 +0000
committerGitHub <noreply@github.com>2022-03-14 09:48:43 +0000
commit2b7a6f065b6e30723d6cc8668cff198dbb62b914 (patch)
tree6420fbb2ddc1c8f04f6c4a05633401d3ceca68e1 /lib
parent3c2ba7aa2500618b7b11255ef3f699d6615ad5a2 (diff)
parent66b04453b7a5d7aefa0a55e9101afe0347215128 (diff)
downloadlibfuse-2b7a6f065b6e30723d6cc8668cff198dbb62b914.tar.gz
Merge pull request #635 from amir73il/fopen_noflush
Add support for FOPEN_NOFLUSH flag
Diffstat (limited to 'lib')
-rw-r--r--lib/fuse.c6
-rw-r--r--lib/fuse_lowlevel.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/fuse.c b/lib/fuse.c
index 91a4b70..507c80b 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -3272,6 +3272,10 @@ static void fuse_lib_open(fuse_req_t req, fuse_ino_t ino,
if (f->conf.auto_cache)
open_auto_cache(f, ino, path, fi);
+
+ if (f->conf.no_rofd_flush &&
+ (fi->flags & O_ACCMODE) == O_RDONLY)
+ fi->noflush = 1;
}
fuse_finish_interrupt(f, req, &d);
}
@@ -4655,6 +4659,7 @@ static const struct fuse_opt fuse_lib_opts[] = {
FUSE_LIB_OPT("kernel_cache", kernel_cache, 1),
FUSE_LIB_OPT("auto_cache", auto_cache, 1),
FUSE_LIB_OPT("noauto_cache", auto_cache, 0),
+ FUSE_LIB_OPT("no_rofd_flush", no_rofd_flush, 1),
FUSE_LIB_OPT("umask=", set_mode, 1),
FUSE_LIB_OPT("umask=%o", umask, 0),
FUSE_LIB_OPT("uid=", set_uid, 1),
@@ -4707,6 +4712,7 @@ void fuse_lib_help(struct fuse_args *args)
printf(
" -o kernel_cache cache files in kernel\n"
" -o [no]auto_cache enable caching based on modification times (off)\n"
+" -o no_rofd_flush disable flushing of read-only fd on close (off)\n"
" -o umask=M set file permissions (octal)\n"
" -o uid=N set file owner\n"
" -o gid=N set file group\n"
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index d227688..b5638fc 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -395,6 +395,8 @@ static void fill_open(struct fuse_open_out *arg,
arg->open_flags |= FOPEN_CACHE_DIR;
if (f->nonseekable)
arg->open_flags |= FOPEN_NONSEEKABLE;
+ if (f->noflush)
+ arg->open_flags |= FOPEN_NOFLUSH;
}
int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e)