From 024eccbfa5c71a1c927e83753c26c1e6a738708f Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Sun, 26 Mar 2023 11:35:22 +0100 Subject: Revert "upgrade of fuse_kernel.h based on Miklos expire_only kernel patch https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git/commit/?h=for-next&id=53e949edb7692dce02220eba926c9d75ecbb47f7" This reverts commit 7f430a39db5a30979d75a906af891a38ebce1a3c because it breaks setxattr(). Fixes: #730 --- include/fuse_kernel.h | 201 +++----------------------------------------------- 1 file changed, 11 insertions(+), 190 deletions(-) diff --git a/include/fuse_kernel.h b/include/fuse_kernel.h index 814a86f..85a383f 100644 --- a/include/fuse_kernel.h +++ b/include/fuse_kernel.h @@ -38,43 +38,6 @@ * * Protocol changelog: * - * 7.1: - * - add the following messages: - * FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK, - * FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE, - * FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR, - * FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR, - * FUSE_RELEASEDIR - * - add padding to messages to accommodate 32-bit servers on 64-bit kernels - * - * 7.2: - * - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags - * - add FUSE_FSYNCDIR message - * - * 7.3: - * - add FUSE_ACCESS message - * - add FUSE_CREATE message - * - add filehandle to fuse_setattr_in - * - * 7.4: - * - add frsize to fuse_kstatfs - * - clean up request size limit checking - * - * 7.5: - * - add flags and max_write to fuse_init_out - * - * 7.6: - * - add max_readahead to fuse_init_in and fuse_init_out - * - * 7.7: - * - add FUSE_INTERRUPT message - * - add POSIX file lock support - * - * 7.8: - * - add lock_owner and flags fields to fuse_release_in - * - add FUSE_BMAP message - * - add FUSE_DESTROY message - * * 7.9: * - new fuse_getattr_in input argument of GETATTR * - add lk_flags in fuse_lk_in @@ -170,36 +133,6 @@ * * 7.31 * - add FUSE_WRITE_KILL_PRIV flag - * - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING - * - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag - * - * 7.32 - * - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS - * - * 7.33 - * - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID - * - add FUSE_OPEN_KILL_SUIDGID - * - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT - * - add FUSE_SETXATTR_ACL_KILL_SGID - * - * 7.34 - * - add FUSE_SYNCFS - * - * 7.35 - * - add FOPEN_NOFLUSH - * - * 7.36 - * - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag - * - add flags2 to fuse_init_in and fuse_init_out - * - add FUSE_SECURITY_CTX init flag - * - add security context to create, mkdir, symlink, and mknod requests - * - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX - * - * 7.37 - * - add FUSE_TMPFILE - * - * 7.38 - * - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry */ #ifndef _LINUX_FUSE_H @@ -235,7 +168,7 @@ #define FUSE_KERNEL_VERSION 7 /** Minor version number of this interface */ -#define FUSE_KERNEL_MINOR_VERSION 38 +#define FUSE_KERNEL_MINOR_VERSION 31 /** The node ID of the root inode */ #define FUSE_ROOT_ID 1 @@ -259,7 +192,7 @@ struct fuse_attr { uint32_t gid; uint32_t rdev; uint32_t blksize; - uint32_t flags; + uint32_t padding; }; struct fuse_kstatfs { @@ -296,7 +229,6 @@ struct fuse_file_lock { #define FATTR_MTIME_NOW (1 << 8) #define FATTR_LOCKOWNER (1 << 9) #define FATTR_CTIME (1 << 10) -#define FATTR_KILL_SUIDGID (1 << 11) /** * Flags returned by the OPEN request @@ -345,21 +277,6 @@ struct fuse_file_lock { * FUSE_CACHE_SYMLINKS: cache READLINK responses * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request - * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for - * foffset and moffset fields in struct - * fuse_setupmapping_out and fuse_removemapping_one. - * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts - * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc. - * Upon write/truncate suid/sgid is only killed if caller - * does not have CAP_FSETID. Additionally upon - * write/truncate sgid is killed only if file has group - * execute permission. (Same as Linux VFS behavior). - * FUSE_SETXATTR_EXT: Server supports extended struct fuse_setxattr_in - * FUSE_INIT_EXT: extended fuse_init_in request - * FUSE_INIT_RESERVED: reserved, do not use - * FUSE_SECURITY_CTX: add security context to create, mkdir, symlink, and - * mknod - * FUSE_HAS_INODE_DAX: use per inode DAX */ #define FUSE_ASYNC_READ (1 << 0) #define FUSE_POSIX_LOCKS (1 << 1) @@ -425,14 +342,11 @@ struct fuse_file_lock { * * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed * FUSE_WRITE_LOCKOWNER: lock_owner field is valid - * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits + * FUSE_WRITE_KILL_PRIV: kill suid and sgid bits */ #define FUSE_WRITE_CACHE (1 << 0) #define FUSE_WRITE_LOCKOWNER (1 << 1) -#define FUSE_WRITE_KILL_SUIDGID (1 << 2) - -/* Obsolete alias; this flag implies killing suid/sgid only. */ -#define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID +#define FUSE_WRITE_KILL_PRIV (1 << 2) /** * Read flags @@ -474,27 +388,6 @@ struct fuse_file_lock { */ #define FUSE_FSYNC_FDATASYNC (1 << 0) -/** - * fuse_attr flags - * - * FUSE_ATTR_SUBMOUNT: Object is a submount root - * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode - */ -#define FUSE_ATTR_SUBMOUNT (1 << 0) -#define FUSE_ATTR_DAX (1 << 1) - -/** - * Open flags - * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable - */ -#define FUSE_OPEN_KILL_SUIDGID (1 << 0) - -/** - * setxattr flags - * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set - */ -#define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0) - /** * notify_inval_entry flags * FUSE_EXPIRE_ONLY @@ -547,17 +440,9 @@ enum fuse_opcode { FUSE_RENAME2 = 45, FUSE_LSEEK = 46, FUSE_COPY_FILE_RANGE = 47, - FUSE_SETUPMAPPING = 48, - FUSE_REMOVEMAPPING = 49, - FUSE_SYNCFS = 50, - FUSE_TMPFILE = 51, /* CUSE specific operations */ - CUSE_INIT = 4096, - - /* Reserved opcodes: helpful to detect structure endian-ness */ - CUSE_INIT_BSWAP_RESERVED = 1048576, /* CUSE_INIT << 8 */ - FUSE_INIT_BSWAP_RESERVED = 436207616, /* FUSE_INIT << 24 */ + CUSE_INIT = 4096 }; enum fuse_notify_code { @@ -567,7 +452,7 @@ enum fuse_notify_code { FUSE_NOTIFY_STORE = 4, FUSE_NOTIFY_RETRIEVE = 5, FUSE_NOTIFY_DELETE = 6, - FUSE_NOTIFY_CODE_MAX, + FUSE_NOTIFY_CODE_MAX }; /* The read buffer is required to be at least 8k, but may be much larger */ @@ -664,14 +549,14 @@ struct fuse_setattr_in { struct fuse_open_in { uint32_t flags; - uint32_t open_flags; /* FUSE_OPEN_... */ + uint32_t unused; }; struct fuse_create_in { uint32_t flags; uint32_t mode; uint32_t umask; - uint32_t open_flags; /* FUSE_OPEN_... */ + uint32_t padding; }; struct fuse_open_out { @@ -733,13 +618,9 @@ struct fuse_fsync_in { uint32_t padding; }; -#define FUSE_COMPAT_SETXATTR_IN_SIZE 8 - struct fuse_setxattr_in { uint32_t size; uint32_t flags; - uint32_t setxattr_flags; - uint32_t padding; }; struct fuse_getxattr_in { @@ -901,12 +782,9 @@ struct fuse_dirent { char name[]; }; -/* Align variable length records to 64bit boundary */ -#define FUSE_REC_ALIGN(x) \ - (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) - #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) -#define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x) +#define FUSE_DIRENT_ALIGN(x) \ + (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) #define FUSE_DIRENT_SIZE(d) \ FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) @@ -965,8 +843,7 @@ struct fuse_notify_retrieve_in { }; /* 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_CLONE _IOR(229, 0, uint32_t) struct fuse_lseek_in { uint64_t fh; @@ -989,60 +866,4 @@ struct fuse_copy_file_range_in { uint64_t flags; }; -#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0) -#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1) -struct fuse_setupmapping_in { - /* An already open handle */ - uint64_t fh; - /* Offset into the file to start the mapping */ - uint64_t foffset; - /* Length of mapping required */ - uint64_t len; - /* Flags, FUSE_SETUPMAPPING_FLAG_* */ - uint64_t flags; - /* Offset in Memory Window */ - uint64_t moffset; -}; - -struct fuse_removemapping_in { - /* number of fuse_removemapping_one follows */ - uint32_t count; -}; - -struct fuse_removemapping_one { - /* Offset into the dax window start the unmapping */ - uint64_t moffset; - /* Length of mapping required */ - uint64_t len; -}; - -#define FUSE_REMOVEMAPPING_MAX_ENTRY \ - (PAGE_SIZE / sizeof(struct fuse_removemapping_one)) - -struct fuse_syncfs_in { - uint64_t padding; -}; - -/* - * For each security context, send fuse_secctx with size of security context - * fuse_secctx will be followed by security context name and this in turn - * will be followed by actual context label. - * fuse_secctx, name, context - */ -struct fuse_secctx { - uint32_t size; - uint32_t padding; -}; - -/* - * Contains the information about how many fuse_secctx structures are being - * sent and what's the total size of all security contexts (including - * size of fuse_secctx_header). - * - */ -struct fuse_secctx_header { - uint32_t size; - uint32_t nr_secctx; -}; - #endif /* _LINUX_FUSE_H */ -- cgit v1.2.1