summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNikhilesh Reddy <reddyn@codeaurora.org>2016-01-20 16:16:30 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:15:47 -0700
commit5a9fde57cf7d5398bf4c654e9176e9b627a96bf1 (patch)
tree84874122a8128b03a5bfc0d7f978d1bc5fdbbe16 /include
parent38db8e6ce112f5aecb06f434c26a1c780d2ea4e6 (diff)
fuse: Add support for passthrough read/write
Add support for filesystem passthrough read/write of files when enabled in userspace through the option FUSE_PASSTHROUGH. There are many FUSE based filesystems that perform checks or enforce policy or perform some kind of decision making in certain functions like the "open" call but simply act as a "passthrough" when performing operations such as read or write. When FUSE_PASSTHROUGH is enabled all the reads and writes to the fuse mount point go directly to the passthrough filesystem i.e a native filesystem that actually hosts the files rather than through the fuse daemon. All requests that aren't read/write still go thought the userspace code. This allows for significantly better performance on read and writes. The difference in performance between fuse and the native lower filesystem is negligible. There is also a significant cpu/power savings that is achieved which is really important on embedded systems that use fuse for I/O. Changelog: v5: Fix the check when setting the passthrough file [Found when testing by Mike Shal] v3 and v4: Use the fs_stack_depth to prevent further stacking and a minor fix [Fix suggested by Jann Horn] v2: Changed the feature name to passthrough from stacked_io [Proposed by Linus Torvalds] Signed-off-by: Nikhilesh Reddy <reddyn@codeaurora.org>
Diffstat (limited to 'include')
-rw-r--r--include/uapi/linux/fuse.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index c9aca042e61d..a08933a58079 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -250,6 +250,7 @@ struct fuse_file_lock {
#define FUSE_ASYNC_DIO (1 << 15)
#define FUSE_WRITEBACK_CACHE (1 << 16)
#define FUSE_NO_OPEN_SUPPORT (1 << 17)
+#define FUSE_PASSTHROUGH (1 << 18)
/**
* CUSE INIT request/reply flags
@@ -480,7 +481,7 @@ struct fuse_create_in {
struct fuse_open_out {
uint64_t fh;
uint32_t open_flags;
- uint32_t padding;
+ int32_t passthrough_fd;
};
struct fuse_release_in {