]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update the bundled <linux/fuse.h> userspace header from Linux 6.18
authorXi Ruoyao <xry111@xry111.site>
Thu, 8 Jan 2026 07:27:54 +0000 (15:27 +0800)
committerAndreas K. Hüttel <dilfridge@gentoo.org>
Fri, 9 Jan 2026 11:19:49 +0000 (12:19 +0100)
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
support/bundled/linux/include/uapi/linux/fuse.h

index d08b99d60f6fd6d0d072d01ad6bcc1b48da0a242..c13e1f9a2f12bd39f535188cb5466688eba42263 100644 (file)
  *  - add backing_id to fuse_open_out, add FOPEN_PASSTHROUGH open flag
  *  - add FUSE_NO_EXPORT_SUPPORT init flag
  *  - add FUSE_NOTIFY_RESEND, add FUSE_HAS_RESEND init flag
+ *
+ *  7.41
+ *  - add FUSE_ALLOW_IDMAP
+ *  7.42
+ *  - Add FUSE_OVER_IO_URING and all other io-uring related flags and data
+ *    structures:
+ *    - struct fuse_uring_ent_in_out
+ *    - struct fuse_uring_req_header
+ *    - struct fuse_uring_cmd_req
+ *    - FUSE_URING_IN_OUT_HEADER_SZ
+ *    - FUSE_URING_OP_IN_OUT_SZ
+ *    - enum fuse_uring_cmd
+ *
+ *  7.43
+ *  - add FUSE_REQUEST_TIMEOUT
+ *
+ *  7.44
+ *  - add FUSE_NOTIFY_INC_EPOCH
+ *
+ *  7.45
+ *  - add FUSE_COPY_FILE_RANGE_64
+ *  - add struct fuse_copy_file_range_out
+ *  - add FUSE_NOTIFY_PRUNE
  */
 
 #ifndef _LINUX_FUSE_H
 #define FUSE_KERNEL_VERSION 7
 
 /** Minor version number of this interface */
-#define FUSE_KERNEL_MINOR_VERSION 40
+#define FUSE_KERNEL_MINOR_VERSION 45
 
 /** The node ID of the root inode */
 #define FUSE_ROOT_ID 1
@@ -421,6 +444,10 @@ struct fuse_file_lock {
  * FUSE_NO_EXPORT_SUPPORT: explicitly disable export support
  * FUSE_HAS_RESEND: kernel supports resending pending requests, and the high bit
  *                 of the request ID indicates resend requests
+ * FUSE_ALLOW_IDMAP: allow creation of idmapped mounts
+ * FUSE_OVER_IO_URING: Indicate that client supports io-uring
+ * FUSE_REQUEST_TIMEOUT: kernel supports timing out requests.
+ *                      init_out.request_timeout contains the timeout (in secs)
  */
 #define FUSE_ASYNC_READ                (1 << 0)
 #define FUSE_POSIX_LOCKS       (1 << 1)
@@ -463,9 +490,11 @@ struct fuse_file_lock {
 #define FUSE_PASSTHROUGH       (1ULL << 37)
 #define FUSE_NO_EXPORT_SUPPORT (1ULL << 38)
 #define FUSE_HAS_RESEND                (1ULL << 39)
-
 /* Obsolete alias for FUSE_DIRECT_IO_ALLOW_MMAP */
 #define FUSE_DIRECT_IO_RELAX   FUSE_DIRECT_IO_ALLOW_MMAP
+#define FUSE_ALLOW_IDMAP       (1ULL << 40)
+#define FUSE_OVER_IO_URING     (1ULL << 41)
+#define FUSE_REQUEST_TIMEOUT   (1ULL << 42)
 
 /**
  * CUSE INIT request/reply flags
@@ -633,6 +662,7 @@ enum fuse_opcode {
        FUSE_SYNCFS             = 50,
        FUSE_TMPFILE            = 51,
        FUSE_STATX              = 52,
+       FUSE_COPY_FILE_RANGE_64 = 53,
 
        /* CUSE specific operations */
        CUSE_INIT               = 4096,
@@ -650,7 +680,8 @@ enum fuse_notify_code {
        FUSE_NOTIFY_RETRIEVE = 5,
        FUSE_NOTIFY_DELETE = 6,
        FUSE_NOTIFY_RESEND = 7,
-       FUSE_NOTIFY_CODE_MAX,
+       FUSE_NOTIFY_INC_EPOCH = 8,
+       FUSE_NOTIFY_PRUNE = 9,
 };
 
 /* The read buffer is required to be at least 8k, but may be much larger */
@@ -893,7 +924,8 @@ struct fuse_init_out {
        uint16_t        map_alignment;
        uint32_t        flags2;
        uint32_t        max_stack_depth;
-       uint32_t        unused[6];
+       uint16_t        request_timeout;
+       uint16_t        unused[11];
 };
 
 #define CUSE_INIT_INFO_MAX 4096
@@ -984,6 +1016,21 @@ struct fuse_fallocate_in {
  */
 #define FUSE_UNIQUE_RESEND (1ULL << 63)
 
+/**
+ * This value will be set by the kernel to
+ * (struct fuse_in_header).{uid,gid} fields in
+ * case when:
+ * - fuse daemon enabled FUSE_ALLOW_IDMAP
+ * - idmapping information is not available and uid/gid
+ *   can not be mapped in accordance with an idmapping.
+ *
+ * Note: an idmapping information always available
+ * for inode creation operations like:
+ * FUSE_MKNOD, FUSE_SYMLINK, FUSE_MKDIR, FUSE_TMPFILE,
+ * FUSE_CREATE and FUSE_RENAME2 (with RENAME_WHITEOUT).
+ */
+#define FUSE_INVALID_UIDGID ((uint32_t)(-1))
+
 struct fuse_in_header {
        uint32_t        len;
        uint32_t        opcode;
@@ -1073,6 +1120,12 @@ struct fuse_notify_retrieve_in {
        uint64_t        dummy4;
 };
 
+struct fuse_notify_prune_out {
+       uint32_t        count;
+       uint32_t        padding;
+       uint64_t        spare;
+};
+
 struct fuse_backing_map {
        int32_t         fd;
        uint32_t        flags;
@@ -1085,6 +1138,7 @@ 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)
 
 struct fuse_lseek_in {
        uint64_t        fh;
@@ -1107,6 +1161,11 @@ struct fuse_copy_file_range_in {
        uint64_t        flags;
 };
 
+/* For FUSE_COPY_FILE_RANGE_64 */
+struct fuse_copy_file_range_out {
+       uint64_t        bytes_copied;
+};
+
 #define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0)
 #define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1)
 struct fuse_setupmapping_in {
@@ -1186,4 +1245,67 @@ struct fuse_supp_groups {
        uint32_t        groups[];
 };
 
+/**
+ * Size of the ring buffer header
+ */
+#define FUSE_URING_IN_OUT_HEADER_SZ 128
+#define FUSE_URING_OP_IN_OUT_SZ 128
+
+/* Used as part of the fuse_uring_req_header */
+struct fuse_uring_ent_in_out {
+       uint64_t flags;
+
+       /*
+        * commit ID to be used in a reply to a ring request (see also
+        * struct fuse_uring_cmd_req)
+        */
+       uint64_t commit_id;
+
+       /* size of user payload buffer */
+       uint32_t payload_sz;
+       uint32_t padding;
+
+       uint64_t reserved;
+};
+
+/**
+ * Header for all fuse-io-uring requests
+ */
+struct fuse_uring_req_header {
+       /* struct fuse_in_header / struct fuse_out_header */
+       char in_out[FUSE_URING_IN_OUT_HEADER_SZ];
+
+       /* per op code header */
+       char op_in[FUSE_URING_OP_IN_OUT_SZ];
+
+       struct fuse_uring_ent_in_out ring_ent_in_out;
+};
+
+/**
+ * sqe commands to the kernel
+ */
+enum fuse_uring_cmd {
+       FUSE_IO_URING_CMD_INVALID = 0,
+
+       /* register the request buffer and fetch a fuse request */
+       FUSE_IO_URING_CMD_REGISTER = 1,
+
+       /* commit fuse request result and fetch next request */
+       FUSE_IO_URING_CMD_COMMIT_AND_FETCH = 2,
+};
+
+/**
+ * In the 80B command area of the SQE.
+ */
+struct fuse_uring_cmd_req {
+       uint64_t flags;
+
+       /* entry identifier for commits */
+       uint64_t commit_id;
+
+       /* queue the command is for (queue index) */
+       uint16_t qid;
+       uint8_t padding[6];
+};
+
 #endif /* _LINUX_FUSE_H */