248#include <linux/types.h>
274#define FUSE_KERNEL_VERSION 7
277#define FUSE_KERNEL_MINOR_VERSION 45
280#define FUSE_ROOT_ID 1
322 uint16_t __spare0[1];
326 uint64_t attributes_mask;
327 struct fuse_sx_time atime;
328 struct fuse_sx_time btime;
329 struct fuse_sx_time ctime;
330 struct fuse_sx_time mtime;
335 uint64_t __spare2[14];
351struct fuse_file_lock {
361#define FATTR_MODE (1 << 0)
362#define FATTR_UID (1 << 1)
363#define FATTR_GID (1 << 2)
364#define FATTR_SIZE (1 << 3)
365#define FATTR_ATIME (1 << 4)
366#define FATTR_MTIME (1 << 5)
367#define FATTR_FH (1 << 6)
368#define FATTR_ATIME_NOW (1 << 7)
369#define FATTR_MTIME_NOW (1 << 8)
370#define FATTR_LOCKOWNER (1 << 9)
371#define FATTR_CTIME (1 << 10)
372#define FATTR_KILL_SUIDGID (1 << 11)
386#define FOPEN_DIRECT_IO (1 << 0)
387#define FOPEN_KEEP_CACHE (1 << 1)
388#define FOPEN_NONSEEKABLE (1 << 2)
389#define FOPEN_CACHE_DIR (1 << 3)
390#define FOPEN_STREAM (1 << 4)
391#define FOPEN_NOFLUSH (1 << 5)
392#define FOPEN_PARALLEL_DIRECT_WRITES (1 << 6)
393#define FOPEN_PASSTHROUGH (1 << 7)
451#define FUSE_ASYNC_READ (1 << 0)
452#define FUSE_POSIX_LOCKS (1 << 1)
453#define FUSE_FILE_OPS (1 << 2)
454#define FUSE_ATOMIC_O_TRUNC (1 << 3)
455#define FUSE_EXPORT_SUPPORT (1 << 4)
456#define FUSE_BIG_WRITES (1 << 5)
457#define FUSE_DONT_MASK (1 << 6)
458#define FUSE_SPLICE_WRITE (1 << 7)
459#define FUSE_SPLICE_MOVE (1 << 8)
460#define FUSE_SPLICE_READ (1 << 9)
461#define FUSE_FLOCK_LOCKS (1 << 10)
462#define FUSE_HAS_IOCTL_DIR (1 << 11)
463#define FUSE_AUTO_INVAL_DATA (1 << 12)
464#define FUSE_DO_READDIRPLUS (1 << 13)
465#define FUSE_READDIRPLUS_AUTO (1 << 14)
466#define FUSE_ASYNC_DIO (1 << 15)
467#define FUSE_WRITEBACK_CACHE (1 << 16)
468#define FUSE_NO_OPEN_SUPPORT (1 << 17)
469#define FUSE_PARALLEL_DIROPS (1 << 18)
470#define FUSE_HANDLE_KILLPRIV (1 << 19)
471#define FUSE_POSIX_ACL (1 << 20)
472#define FUSE_ABORT_ERROR (1 << 21)
473#define FUSE_MAX_PAGES (1 << 22)
474#define FUSE_CACHE_SYMLINKS (1 << 23)
475#define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
476#define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
477#define FUSE_MAP_ALIGNMENT (1 << 26)
478#define FUSE_SUBMOUNTS (1 << 27)
479#define FUSE_HANDLE_KILLPRIV_V2 (1 << 28)
480#define FUSE_SETXATTR_EXT (1 << 29)
481#define FUSE_INIT_EXT (1 << 30)
482#define FUSE_INIT_RESERVED (1 << 31)
484#define FUSE_SECURITY_CTX (1ULL << 32)
485#define FUSE_HAS_INODE_DAX (1ULL << 33)
486#define FUSE_CREATE_SUPP_GROUP (1ULL << 34)
487#define FUSE_HAS_EXPIRE_ONLY (1ULL << 35)
488#define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36)
489#define FUSE_PASSTHROUGH (1ULL << 37)
490#define FUSE_NO_EXPORT_SUPPORT (1ULL << 38)
491#define FUSE_HAS_RESEND (1ULL << 39)
493#define FUSE_DIRECT_IO_RELAX FUSE_DIRECT_IO_ALLOW_MMAP
494#define FUSE_ALLOW_IDMAP (1ULL << 40)
495#define FUSE_OVER_IO_URING (1ULL << 41)
496#define FUSE_REQUEST_TIMEOUT (1ULL << 42)
503#define CUSE_UNRESTRICTED_IOCTL (1 << 0)
508#define FUSE_RELEASE_FLUSH (1 << 0)
509#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1)
514#define FUSE_GETATTR_FH (1 << 0)
519#define FUSE_LK_FLOCK (1 << 0)
528#define FUSE_WRITE_CACHE (1 << 0)
529#define FUSE_WRITE_LOCKOWNER (1 << 1)
530#define FUSE_WRITE_KILL_SUIDGID (1 << 2)
533#define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID
538#define FUSE_READ_LOCKOWNER (1 << 1)
552#define FUSE_IOCTL_COMPAT (1 << 0)
553#define FUSE_IOCTL_UNRESTRICTED (1 << 1)
554#define FUSE_IOCTL_RETRY (1 << 2)
555#define FUSE_IOCTL_32BIT (1 << 3)
556#define FUSE_IOCTL_DIR (1 << 4)
557#define FUSE_IOCTL_COMPAT_X32 (1 << 5)
559#define FUSE_IOCTL_MAX_IOV 256
566#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
573#define FUSE_FSYNC_FDATASYNC (1 << 0)
581#define FUSE_ATTR_SUBMOUNT (1 << 0)
582#define FUSE_ATTR_DAX (1 << 1)
588#define FUSE_OPEN_KILL_SUIDGID (1 << 0)
594#define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0)
600#define FUSE_EXPIRE_ONLY (1 << 0)
609 FUSE_MAX_NR_SECCTX = 31,
610 FUSE_EXT_GROUPS = 32,
635 FUSE_REMOVEXATTR = 24,
640 FUSE_RELEASEDIR = 29,
652 FUSE_NOTIFY_REPLY = 41,
653 FUSE_BATCH_FORGET = 42,
655 FUSE_READDIRPLUS = 44,
658 FUSE_COPY_FILE_RANGE = 47,
659 FUSE_SETUPMAPPING = 48,
660 FUSE_REMOVEMAPPING = 49,
664 FUSE_COPY_FILE_RANGE_64 = 53,
670 CUSE_INIT_BSWAP_RESERVED = 1048576,
671 FUSE_INIT_BSWAP_RESERVED = 436207616,
674enum fuse_notify_code {
675 FUSE_NOTIFY_POLL = 1,
676 FUSE_NOTIFY_INVAL_INODE = 2,
677 FUSE_NOTIFY_INVAL_ENTRY = 3,
678 FUSE_NOTIFY_STORE = 4,
679 FUSE_NOTIFY_RETRIEVE = 5,
680 FUSE_NOTIFY_DELETE = 6,
681 FUSE_NOTIFY_RESEND = 7,
682 FUSE_NOTIFY_INC_EPOCH = 8,
683 FUSE_NOTIFY_CODE_MAX,
687#define FUSE_MIN_READ_BUFFER 8192
689#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
691struct fuse_entry_out {
695 uint64_t entry_valid;
697 uint32_t entry_valid_nsec;
698 uint32_t attr_valid_nsec;
699 struct fuse_attr attr;
702struct fuse_forget_in {
706struct fuse_forget_one {
711struct fuse_batch_forget_in {
716struct fuse_getattr_in {
717 uint32_t getattr_flags;
722#define FUSE_COMPAT_ATTR_OUT_SIZE 96
724struct fuse_attr_out {
726 uint32_t attr_valid_nsec;
728 struct fuse_attr attr;
731struct fuse_statx_in {
732 uint32_t getattr_flags;
739struct fuse_statx_out {
741 uint32_t attr_valid_nsec;
744 struct fuse_statx stat;
747#define FUSE_COMPAT_MKNOD_IN_SIZE 8
749struct fuse_mknod_in {
756struct fuse_mkdir_in {
761struct fuse_rename_in {
765struct fuse_rename2_in {
775struct fuse_setattr_in {
799struct fuse_create_in {
806struct fuse_open_out {
812struct fuse_release_in {
815 uint32_t release_flags;
819struct fuse_flush_in {
836#define FUSE_COMPAT_WRITE_IN_SIZE 24
838struct fuse_write_in {
842 uint32_t write_flags;
848struct fuse_write_out {
853#define FUSE_COMPAT_STATFS_SIZE 48
855struct fuse_statfs_out {
856 struct fuse_kstatfs st;
859struct fuse_fsync_in {
861 uint32_t fsync_flags;
865#define FUSE_COMPAT_SETXATTR_IN_SIZE 8
867struct fuse_setxattr_in {
870 uint32_t setxattr_flags;
874struct fuse_getxattr_in {
879struct fuse_getxattr_out {
887 struct fuse_file_lock lk;
893 struct fuse_file_lock lk;
896struct fuse_access_in {
904 uint32_t max_readahead;
910#define FUSE_COMPAT_INIT_OUT_SIZE 8
911#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
913struct fuse_init_out {
916 uint32_t max_readahead;
918 uint16_t max_background;
919 uint16_t congestion_threshold;
923 uint16_t map_alignment;
925 uint32_t max_stack_depth;
926 uint16_t request_timeout;
930#define CUSE_INIT_INFO_MAX 4096
939struct cuse_init_out {
951struct fuse_interrupt_in {
961struct fuse_bmap_out {
965struct fuse_ioctl_in {
974struct fuse_ioctl_iovec {
979struct fuse_ioctl_out {
993struct fuse_poll_out {
998struct fuse_notify_poll_wakeup_out {
1002struct fuse_fallocate_in {
1016#define FUSE_UNIQUE_RESEND (1ULL << 63)
1031#define FUSE_INVALID_UIDGID ((uint32_t)(-1))
1033struct fuse_in_header {
1041 uint16_t total_extlen;
1045struct fuse_out_header {
1060#define FUSE_REC_ALIGN(x) \
1061 (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
1063#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
1064#define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x)
1065#define FUSE_DIRENT_SIZE(d) \
1066 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
1068struct fuse_direntplus {
1069 struct fuse_entry_out entry_out;
1070 struct fuse_dirent dirent;
1073#define FUSE_NAME_OFFSET_DIRENTPLUS \
1074 offsetof(struct fuse_direntplus, dirent.name)
1075#define FUSE_DIRENTPLUS_SIZE(d) \
1076 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
1078struct fuse_notify_inval_inode_out {
1084struct fuse_notify_inval_entry_out {
1090struct fuse_notify_delete_out {
1097struct fuse_notify_store_out {
1104struct fuse_notify_retrieve_out {
1105 uint64_t notify_unique;
1113struct fuse_notify_retrieve_in {
1122struct fuse_backing_map {
1129#define FUSE_DEV_IOC_MAGIC 229
1130#define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
1131#define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, \
1132 struct fuse_backing_map)
1133#define FUSE_DEV_IOC_BACKING_CLOSE _IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t)
1135struct fuse_lseek_in {
1142struct fuse_lseek_out {
1146struct fuse_copy_file_range_in {
1149 uint64_t nodeid_out;
1157struct fuse_copy_file_range_out {
1158 uint64_t bytes_copied;
1161#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0)
1162#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1)
1163struct fuse_setupmapping_in {
1176struct fuse_removemapping_in {
1181struct fuse_removemapping_one {
1188#define FUSE_REMOVEMAPPING_MAX_ENTRY \
1189 (PAGE_SIZE / sizeof(struct fuse_removemapping_one))
1191struct fuse_syncfs_in {
1212struct fuse_secctx_header {
1243#define FUSE_URING_IN_OUT_HEADER_SZ 128
1244#define FUSE_URING_OP_IN_OUT_SZ 128
1247struct fuse_uring_ent_in_out {
1257 uint32_t payload_sz;
1268 char in_out[FUSE_URING_IN_OUT_HEADER_SZ];
1271 char op_in[FUSE_URING_OP_IN_OUT_SZ];
1273 struct fuse_uring_ent_in_out ring_ent_in_out;
1279enum fuse_uring_cmd {
1280 FUSE_IO_URING_CMD_INVALID = 0,
1283 FUSE_IO_URING_CMD_REGISTER = 1,
1286 FUSE_IO_URING_CMD_COMMIT_AND_FETCH = 2,