summaryrefslogtreecommitdiff
path: root/include/uapi/linux
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@redhat.com>2026-09-21 10:44:05 +0200
committerMiklos Szeredi <mszeredi@redhat.com>2026-10-19 14:56:24 +0200
commit2f19d54c055d7db0fd78db638fd746efca4d5115 (patch)
tree77006d9d98c964178297a6c6cf3685379e092c3a /include/uapi/linux
parentb89c73703eb50e28c95a0efa958b649ec3ca1c7b (diff)
downloadlinux-next-2f19d54c055d7db0fd78db638fd746efca4d5115.tar.gz
linux-next-2f19d54c055d7db0fd78db638fd746efca4d5115.zip
fuse: support 64 bit, server allocated backing ID
Add support for server allocated 64-bit backing IDs alongside the existing kernel allocated 32-bit IDs. Opened with FUSE_DEV_IOC_BACKING_CREATE, the backing ID sent via fuse_backing_create_in.backing_id. Closed with FUSE_NOTIFY_BACKING_REMOVE. Since close only provides the backing ID, not the file descriptor, it doesn't have to be done with an ioctl. Backing ID can take any 64 bit value other than zero. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'include/uapi/linux')
-rw-r--r--include/uapi/linux/fuse.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index ed45bad67ec7..37c83c54d960 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -251,6 +251,9 @@
*
* 7.47
* - add FUSE_HAS_SYNCFS opt-in flag for privileged userspace servers
+ * - add FUSE_PASSTHROUGH_V2
+ * - add FUSE_DEV_IOC_BACKING_CREATE, struct fuse_backing_create_in
+ * - add FUSE_NOTIFY_BACKING_REMOVE, struct fuse_notify_backing_remove_out
*/
#ifndef _LINUX_FUSE_H
@@ -473,6 +476,7 @@ struct fuse_file_lock {
* with CAP_SYS_ADMIN in the initial user namespace (the same
* privilege that mounting virtiofs or fuseblk requires).
* Insufficiently privileged servers ignore it.
+ * FUSE_PASSTHROUGH_V2: use 64 bit server allocated backing ID
*/
#define FUSE_ASYNC_READ (1 << 0)
#define FUSE_POSIX_LOCKS (1 << 1)
@@ -522,6 +526,7 @@ struct fuse_file_lock {
#define FUSE_REQUEST_TIMEOUT (1ULL << 42)
#define FUSE_HAS_IO_URING_BUFPOOL (1ULL << 43)
#define FUSE_HAS_SYNCFS (1ULL << 44)
+#define FUSE_PASSTHROUGH_V2 (1ULL << 45)
/*
* CUSE INIT request/reply flags
@@ -709,6 +714,7 @@ enum fuse_notify_code {
FUSE_NOTIFY_RESEND = 7,
FUSE_NOTIFY_INC_EPOCH = 8,
FUSE_NOTIFY_PRUNE = 9,
+ FUSE_NOTIFY_BACKING_REMOVE = 10,
};
/* The read buffer is required to be at least 8k, but may be much larger */
@@ -1159,13 +1165,20 @@ struct fuse_backing_map {
uint64_t padding;
};
+struct fuse_backing_create_in {
+ int32_t fd;
+ uint32_t padding;
+ uint64_t backing_id; /* Zero value is reserved */
+ uint64_t spare[2];
+};
+
/* Device ioctls: */
#define FUSE_DEV_IOC_MAGIC 229
#define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
-#define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, \
- struct fuse_backing_map)
+#define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, struct fuse_backing_map)
#define FUSE_DEV_IOC_BACKING_CLOSE _IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t)
#define FUSE_DEV_IOC_SYNC_INIT _IO(FUSE_DEV_IOC_MAGIC, 3)
+#define FUSE_DEV_IOC_BACKING_CREATE _IOW(FUSE_DEV_IOC_MAGIC, 4, struct fuse_backing_create_in)
struct fuse_lseek_in {
uint64_t fh;
@@ -1193,6 +1206,11 @@ struct fuse_copy_file_range_out {
uint64_t bytes_copied;
};
+struct fuse_notify_backing_remove_out {
+ uint64_t backing_id;
+ uint64_t reserved;
+};
+
#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0)
#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1)
struct fuse_setupmapping_in {