diff options
author | Bernd Schubert <bschubert@ddn.com> | 2023-10-10 13:18:36 +0200 |
---|---|---|
committer | Nikolaus Rath <Nikolaus@rath.org> | 2023-10-11 08:39:11 +0100 |
commit | 063ef8e03ff669579d3a441bece702283b7654e3 (patch) | |
tree | 7dc4b2ba6bae6e4c4de91f16a1e327bfdc901ff0 | |
parent | ef11cf9eace3cf5f529a23899ae850c09aaf64bc (diff) | |
download | libfuse-063ef8e03ff669579d3a441bece702283b7654e3.tar.gz |
Enabled parallel direct IO writes for passthrough examples
All these passthrough examples don't need writes to be serialized.
Actually, most file systems probably handle non serialized parallel
direct writes - the FOPEN_PARALLEL_DIRECT_WRITES flag is just
to avoid a regression for those file system that rely on serialized
DIO writes in fuse kernel. Passthrough file system forward the IO
to another file system, which actually handles that internally -
serialized in fuser kernel is not needed.
-rw-r--r-- | example/passthrough.c | 2 | ||||
-rw-r--r-- | example/passthrough_fh.c | 2 | ||||
-rw-r--r-- | example/passthrough_hp.cc | 4 | ||||
-rw-r--r-- | example/passthrough_ll.c | 5 |
4 files changed, 13 insertions, 0 deletions
diff --git a/example/passthrough.c b/example/passthrough.c index 5963d58..dd385c5 100644 --- a/example/passthrough.c +++ b/example/passthrough.c @@ -285,6 +285,7 @@ static int xmp_create(const char *path, mode_t mode, return -errno; fi->fh = res; + fi->parallel_direct_writes = 1; return 0; } @@ -297,6 +298,7 @@ static int xmp_open(const char *path, struct fuse_file_info *fi) return -errno; fi->fh = res; + fi->parallel_direct_writes = 1; return 0; } diff --git a/example/passthrough_fh.c b/example/passthrough_fh.c index bc02794..51df3be 100644 --- a/example/passthrough_fh.c +++ b/example/passthrough_fh.c @@ -366,6 +366,7 @@ static int xmp_create(const char *path, mode_t mode, struct fuse_file_info *fi) return -errno; fi->fh = fd; + fi->parallel_direct_writes = 1; return 0; } @@ -378,6 +379,7 @@ static int xmp_open(const char *path, struct fuse_file_info *fi) return -errno; fi->fh = fd; + fi->parallel_direct_writes = 1; return 0; } diff --git a/example/passthrough_hp.cc b/example/passthrough_hp.cc index 9ee6fb1..1ee5352 100644 --- a/example/passthrough_hp.cc +++ b/example/passthrough_hp.cc @@ -836,6 +836,8 @@ static void sfs_create(fuse_req_t req, fuse_ino_t parent, const char *name, if (fs.direct_io) fi->direct_io = 1; + fi->parallel_direct_writes = 1; + Inode& inode = get_inode(e.ino); lock_guard<mutex> g {inode.m}; inode.nopen++; @@ -896,6 +898,8 @@ static void sfs_open(fuse_req_t req, fuse_ino_t ino, fuse_file_info *fi) { if (fs.direct_io) fi->direct_io = 1; + fi->parallel_direct_writes = 1; + fi->fh = fd; fuse_reply_open(req, fi); } diff --git a/example/passthrough_ll.c b/example/passthrough_ll.c index 070cef1..afac6ea 100644 --- a/example/passthrough_ll.c +++ b/example/passthrough_ll.c @@ -775,6 +775,8 @@ 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; + fi->parallel_direct_writes = 1; + err = lo_do_lookup(req, parent, name, &e); if (err) fuse_reply_err(req, err); @@ -831,6 +833,9 @@ static void lo_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) fi->direct_io = 1; else if (lo->cache == CACHE_ALWAYS) fi->keep_cache = 1; + + fi->parallel_direct_writes = 1; + fuse_reply_open(req, fi); } |