16881f68fSopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ 26881f68fSopenharmony_ci/* 36881f68fSopenharmony_ci This file defines the kernel interface of FUSE 46881f68fSopenharmony_ci Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> 56881f68fSopenharmony_ci 66881f68fSopenharmony_ci This program can be distributed under the terms of the GNU GPL. 76881f68fSopenharmony_ci See the file COPYING. 86881f68fSopenharmony_ci 96881f68fSopenharmony_ci This -- and only this -- header file may also be distributed under 106881f68fSopenharmony_ci the terms of the BSD Licence as follows: 116881f68fSopenharmony_ci 126881f68fSopenharmony_ci Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. 136881f68fSopenharmony_ci 146881f68fSopenharmony_ci Redistribution and use in source and binary forms, with or without 156881f68fSopenharmony_ci modification, are permitted provided that the following conditions 166881f68fSopenharmony_ci are met: 176881f68fSopenharmony_ci 1. Redistributions of source code must retain the above copyright 186881f68fSopenharmony_ci notice, this list of conditions and the following disclaimer. 196881f68fSopenharmony_ci 2. Redistributions in binary form must reproduce the above copyright 206881f68fSopenharmony_ci notice, this list of conditions and the following disclaimer in the 216881f68fSopenharmony_ci documentation and/or other materials provided with the distribution. 226881f68fSopenharmony_ci 236881f68fSopenharmony_ci THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 246881f68fSopenharmony_ci ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 256881f68fSopenharmony_ci IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 266881f68fSopenharmony_ci ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 276881f68fSopenharmony_ci FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 286881f68fSopenharmony_ci DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 296881f68fSopenharmony_ci OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 306881f68fSopenharmony_ci HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 316881f68fSopenharmony_ci LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 326881f68fSopenharmony_ci OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 336881f68fSopenharmony_ci SUCH DAMAGE. 346881f68fSopenharmony_ci*/ 356881f68fSopenharmony_ci 366881f68fSopenharmony_ci/* 376881f68fSopenharmony_ci * This file defines the kernel interface of FUSE 386881f68fSopenharmony_ci * 396881f68fSopenharmony_ci * Protocol changelog: 406881f68fSopenharmony_ci * 416881f68fSopenharmony_ci * 7.1: 426881f68fSopenharmony_ci * - add the following messages: 436881f68fSopenharmony_ci * FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK, 446881f68fSopenharmony_ci * FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE, 456881f68fSopenharmony_ci * FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR, 466881f68fSopenharmony_ci * FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR, 476881f68fSopenharmony_ci * FUSE_RELEASEDIR 486881f68fSopenharmony_ci * - add padding to messages to accommodate 32-bit servers on 64-bit kernels 496881f68fSopenharmony_ci * 506881f68fSopenharmony_ci * 7.2: 516881f68fSopenharmony_ci * - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags 526881f68fSopenharmony_ci * - add FUSE_FSYNCDIR message 536881f68fSopenharmony_ci * 546881f68fSopenharmony_ci * 7.3: 556881f68fSopenharmony_ci * - add FUSE_ACCESS message 566881f68fSopenharmony_ci * - add FUSE_CREATE message 576881f68fSopenharmony_ci * - add filehandle to fuse_setattr_in 586881f68fSopenharmony_ci * 596881f68fSopenharmony_ci * 7.4: 606881f68fSopenharmony_ci * - add frsize to fuse_kstatfs 616881f68fSopenharmony_ci * - clean up request size limit checking 626881f68fSopenharmony_ci * 636881f68fSopenharmony_ci * 7.5: 646881f68fSopenharmony_ci * - add flags and max_write to fuse_init_out 656881f68fSopenharmony_ci * 666881f68fSopenharmony_ci * 7.6: 676881f68fSopenharmony_ci * - add max_readahead to fuse_init_in and fuse_init_out 686881f68fSopenharmony_ci * 696881f68fSopenharmony_ci * 7.7: 706881f68fSopenharmony_ci * - add FUSE_INTERRUPT message 716881f68fSopenharmony_ci * - add POSIX file lock support 726881f68fSopenharmony_ci * 736881f68fSopenharmony_ci * 7.8: 746881f68fSopenharmony_ci * - add lock_owner and flags fields to fuse_release_in 756881f68fSopenharmony_ci * - add FUSE_BMAP message 766881f68fSopenharmony_ci * - add FUSE_DESTROY message 776881f68fSopenharmony_ci * 786881f68fSopenharmony_ci * 7.9: 796881f68fSopenharmony_ci * - new fuse_getattr_in input argument of GETATTR 806881f68fSopenharmony_ci * - add lk_flags in fuse_lk_in 816881f68fSopenharmony_ci * - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in 826881f68fSopenharmony_ci * - add blksize field to fuse_attr 836881f68fSopenharmony_ci * - add file flags field to fuse_read_in and fuse_write_in 846881f68fSopenharmony_ci * - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in 856881f68fSopenharmony_ci * 866881f68fSopenharmony_ci * 7.10 876881f68fSopenharmony_ci * - add nonseekable open flag 886881f68fSopenharmony_ci * 896881f68fSopenharmony_ci * 7.11 906881f68fSopenharmony_ci * - add IOCTL message 916881f68fSopenharmony_ci * - add unsolicited notification support 926881f68fSopenharmony_ci * - add POLL message and NOTIFY_POLL notification 936881f68fSopenharmony_ci * 946881f68fSopenharmony_ci * 7.12 956881f68fSopenharmony_ci * - add umask flag to input argument of create, mknod and mkdir 966881f68fSopenharmony_ci * - add notification messages for invalidation of inodes and 976881f68fSopenharmony_ci * directory entries 986881f68fSopenharmony_ci * 996881f68fSopenharmony_ci * 7.13 1006881f68fSopenharmony_ci * - make max number of background requests and congestion threshold 1016881f68fSopenharmony_ci * tunables 1026881f68fSopenharmony_ci * 1036881f68fSopenharmony_ci * 7.14 1046881f68fSopenharmony_ci * - add splice support to fuse device 1056881f68fSopenharmony_ci * 1066881f68fSopenharmony_ci * 7.15 1076881f68fSopenharmony_ci * - add store notify 1086881f68fSopenharmony_ci * - add retrieve notify 1096881f68fSopenharmony_ci * 1106881f68fSopenharmony_ci * 7.16 1116881f68fSopenharmony_ci * - add BATCH_FORGET request 1126881f68fSopenharmony_ci * - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct 1136881f68fSopenharmony_ci * fuse_ioctl_iovec' instead of ambiguous 'struct iovec' 1146881f68fSopenharmony_ci * - add FUSE_IOCTL_32BIT flag 1156881f68fSopenharmony_ci * 1166881f68fSopenharmony_ci * 7.17 1176881f68fSopenharmony_ci * - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK 1186881f68fSopenharmony_ci * 1196881f68fSopenharmony_ci * 7.18 1206881f68fSopenharmony_ci * - add FUSE_IOCTL_DIR flag 1216881f68fSopenharmony_ci * - add FUSE_NOTIFY_DELETE 1226881f68fSopenharmony_ci * 1236881f68fSopenharmony_ci * 7.19 1246881f68fSopenharmony_ci * - add FUSE_FALLOCATE 1256881f68fSopenharmony_ci * 1266881f68fSopenharmony_ci * 7.20 1276881f68fSopenharmony_ci * - add FUSE_AUTO_INVAL_DATA 1286881f68fSopenharmony_ci * 1296881f68fSopenharmony_ci * 7.21 1306881f68fSopenharmony_ci * - add FUSE_READDIRPLUS 1316881f68fSopenharmony_ci * - send the requested events in POLL request 1326881f68fSopenharmony_ci * 1336881f68fSopenharmony_ci * 7.22 1346881f68fSopenharmony_ci * - add FUSE_ASYNC_DIO 1356881f68fSopenharmony_ci * 1366881f68fSopenharmony_ci * 7.23 1376881f68fSopenharmony_ci * - add FUSE_WRITEBACK_CACHE 1386881f68fSopenharmony_ci * - add time_gran to fuse_init_out 1396881f68fSopenharmony_ci * - add reserved space to fuse_init_out 1406881f68fSopenharmony_ci * - add FATTR_CTIME 1416881f68fSopenharmony_ci * - add ctime and ctimensec to fuse_setattr_in 1426881f68fSopenharmony_ci * - add FUSE_RENAME2 request 1436881f68fSopenharmony_ci * - add FUSE_NO_OPEN_SUPPORT flag 1446881f68fSopenharmony_ci * 1456881f68fSopenharmony_ci * 7.24 1466881f68fSopenharmony_ci * - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support 1476881f68fSopenharmony_ci * 1486881f68fSopenharmony_ci * 7.25 1496881f68fSopenharmony_ci * - add FUSE_PARALLEL_DIROPS 1506881f68fSopenharmony_ci * 1516881f68fSopenharmony_ci * 7.26 1526881f68fSopenharmony_ci * - add FUSE_HANDLE_KILLPRIV 1536881f68fSopenharmony_ci * - add FUSE_POSIX_ACL 1546881f68fSopenharmony_ci * 1556881f68fSopenharmony_ci * 7.27 1566881f68fSopenharmony_ci * - add FUSE_ABORT_ERROR 1576881f68fSopenharmony_ci * 1586881f68fSopenharmony_ci * 7.28 1596881f68fSopenharmony_ci * - add FUSE_COPY_FILE_RANGE 1606881f68fSopenharmony_ci * - add FOPEN_CACHE_DIR 1616881f68fSopenharmony_ci * - add FUSE_MAX_PAGES, add max_pages to init_out 1626881f68fSopenharmony_ci * - add FUSE_CACHE_SYMLINKS 1636881f68fSopenharmony_ci * 1646881f68fSopenharmony_ci * 7.29 1656881f68fSopenharmony_ci * - add FUSE_NO_OPENDIR_SUPPORT flag 1666881f68fSopenharmony_ci * 1676881f68fSopenharmony_ci * 7.30 1686881f68fSopenharmony_ci * - add FUSE_EXPLICIT_INVAL_DATA 1696881f68fSopenharmony_ci * - add FUSE_IOCTL_COMPAT_X32 1706881f68fSopenharmony_ci * 1716881f68fSopenharmony_ci * 7.31 1726881f68fSopenharmony_ci * - add FUSE_WRITE_KILL_PRIV flag 1736881f68fSopenharmony_ci * - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING 1746881f68fSopenharmony_ci * - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag 1756881f68fSopenharmony_ci * 1766881f68fSopenharmony_ci * 7.32 1776881f68fSopenharmony_ci * - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS 1786881f68fSopenharmony_ci * 1796881f68fSopenharmony_ci * 7.33 1806881f68fSopenharmony_ci * - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID 1816881f68fSopenharmony_ci * - add FUSE_OPEN_KILL_SUIDGID 1826881f68fSopenharmony_ci * - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT 1836881f68fSopenharmony_ci * - add FUSE_SETXATTR_ACL_KILL_SGID 1846881f68fSopenharmony_ci * 1856881f68fSopenharmony_ci * 7.34 1866881f68fSopenharmony_ci * - add FUSE_SYNCFS 1876881f68fSopenharmony_ci * 1886881f68fSopenharmony_ci * 7.35 1896881f68fSopenharmony_ci * - add FOPEN_NOFLUSH 1906881f68fSopenharmony_ci * 1916881f68fSopenharmony_ci * 7.36 1926881f68fSopenharmony_ci * - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag 1936881f68fSopenharmony_ci * - add flags2 to fuse_init_in and fuse_init_out 1946881f68fSopenharmony_ci * - add FUSE_SECURITY_CTX init flag 1956881f68fSopenharmony_ci * - add security context to create, mkdir, symlink, and mknod requests 1966881f68fSopenharmony_ci * - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX 1976881f68fSopenharmony_ci * 1986881f68fSopenharmony_ci * 7.37 1996881f68fSopenharmony_ci * - add FUSE_TMPFILE 2006881f68fSopenharmony_ci * 2016881f68fSopenharmony_ci * 7.38 2026881f68fSopenharmony_ci * - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry 2036881f68fSopenharmony_ci * - add FOPEN_PARALLEL_DIRECT_WRITES 2046881f68fSopenharmony_ci * - add total_extlen to fuse_in_header 2056881f68fSopenharmony_ci * - add FUSE_MAX_NR_SECCTX 2066881f68fSopenharmony_ci * - add extension header 2076881f68fSopenharmony_ci * - add FUSE_EXT_GROUPS 2086881f68fSopenharmony_ci * - add FUSE_CREATE_SUPP_GROUP 2096881f68fSopenharmony_ci */ 2106881f68fSopenharmony_ci 2116881f68fSopenharmony_ci#ifndef _LINUX_FUSE_H 2126881f68fSopenharmony_ci#define _LINUX_FUSE_H 2136881f68fSopenharmony_ci 2146881f68fSopenharmony_ci#ifdef __KERNEL__ 2156881f68fSopenharmony_ci#include <linux/types.h> 2166881f68fSopenharmony_ci#else 2176881f68fSopenharmony_ci#include <stdint.h> 2186881f68fSopenharmony_ci#endif 2196881f68fSopenharmony_ci 2206881f68fSopenharmony_ci/* 2216881f68fSopenharmony_ci * Version negotiation: 2226881f68fSopenharmony_ci * 2236881f68fSopenharmony_ci * Both the kernel and userspace send the version they support in the 2246881f68fSopenharmony_ci * INIT request and reply respectively. 2256881f68fSopenharmony_ci * 2266881f68fSopenharmony_ci * If the major versions match then both shall use the smallest 2276881f68fSopenharmony_ci * of the two minor versions for communication. 2286881f68fSopenharmony_ci * 2296881f68fSopenharmony_ci * If the kernel supports a larger major version, then userspace shall 2306881f68fSopenharmony_ci * reply with the major version it supports, ignore the rest of the 2316881f68fSopenharmony_ci * INIT message and expect a new INIT message from the kernel with a 2326881f68fSopenharmony_ci * matching major version. 2336881f68fSopenharmony_ci * 2346881f68fSopenharmony_ci * If the library supports a larger major version, then it shall fall 2356881f68fSopenharmony_ci * back to the major protocol version sent by the kernel for 2366881f68fSopenharmony_ci * communication and reply with that major version (and an arbitrary 2376881f68fSopenharmony_ci * supported minor version). 2386881f68fSopenharmony_ci */ 2396881f68fSopenharmony_ci 2406881f68fSopenharmony_ci/** Version number of this interface */ 2416881f68fSopenharmony_ci#define FUSE_KERNEL_VERSION 7 2426881f68fSopenharmony_ci 2436881f68fSopenharmony_ci/** Minor version number of this interface */ 2446881f68fSopenharmony_ci#define FUSE_KERNEL_MINOR_VERSION 38 2456881f68fSopenharmony_ci 2466881f68fSopenharmony_ci/** The node ID of the root inode */ 2476881f68fSopenharmony_ci#define FUSE_ROOT_ID 1 2486881f68fSopenharmony_ci 2496881f68fSopenharmony_ci/* Make sure all structures are padded to 64bit boundary, so 32bit 2506881f68fSopenharmony_ci userspace works under 64bit kernels */ 2516881f68fSopenharmony_ci 2526881f68fSopenharmony_cistruct fuse_attr { 2536881f68fSopenharmony_ci uint64_t ino; 2546881f68fSopenharmony_ci uint64_t size; 2556881f68fSopenharmony_ci uint64_t blocks; 2566881f68fSopenharmony_ci uint64_t atime; 2576881f68fSopenharmony_ci uint64_t mtime; 2586881f68fSopenharmony_ci uint64_t ctime; 2596881f68fSopenharmony_ci uint32_t atimensec; 2606881f68fSopenharmony_ci uint32_t mtimensec; 2616881f68fSopenharmony_ci uint32_t ctimensec; 2626881f68fSopenharmony_ci uint32_t mode; 2636881f68fSopenharmony_ci uint32_t nlink; 2646881f68fSopenharmony_ci uint32_t uid; 2656881f68fSopenharmony_ci uint32_t gid; 2666881f68fSopenharmony_ci uint32_t rdev; 2676881f68fSopenharmony_ci uint32_t blksize; 2686881f68fSopenharmony_ci uint32_t flags; 2696881f68fSopenharmony_ci}; 2706881f68fSopenharmony_ci 2716881f68fSopenharmony_cistruct fuse_kstatfs { 2726881f68fSopenharmony_ci uint64_t blocks; 2736881f68fSopenharmony_ci uint64_t bfree; 2746881f68fSopenharmony_ci uint64_t bavail; 2756881f68fSopenharmony_ci uint64_t files; 2766881f68fSopenharmony_ci uint64_t ffree; 2776881f68fSopenharmony_ci uint32_t bsize; 2786881f68fSopenharmony_ci uint32_t namelen; 2796881f68fSopenharmony_ci uint32_t frsize; 2806881f68fSopenharmony_ci uint32_t padding; 2816881f68fSopenharmony_ci uint32_t spare[6]; 2826881f68fSopenharmony_ci}; 2836881f68fSopenharmony_ci 2846881f68fSopenharmony_cistruct fuse_file_lock { 2856881f68fSopenharmony_ci uint64_t start; 2866881f68fSopenharmony_ci uint64_t end; 2876881f68fSopenharmony_ci uint32_t type; 2886881f68fSopenharmony_ci uint32_t pid; /* tgid */ 2896881f68fSopenharmony_ci}; 2906881f68fSopenharmony_ci 2916881f68fSopenharmony_ci/** 2926881f68fSopenharmony_ci * Bitmasks for fuse_setattr_in.valid 2936881f68fSopenharmony_ci */ 2946881f68fSopenharmony_ci#define FATTR_MODE (1 << 0) 2956881f68fSopenharmony_ci#define FATTR_UID (1 << 1) 2966881f68fSopenharmony_ci#define FATTR_GID (1 << 2) 2976881f68fSopenharmony_ci#define FATTR_SIZE (1 << 3) 2986881f68fSopenharmony_ci#define FATTR_ATIME (1 << 4) 2996881f68fSopenharmony_ci#define FATTR_MTIME (1 << 5) 3006881f68fSopenharmony_ci#define FATTR_FH (1 << 6) 3016881f68fSopenharmony_ci#define FATTR_ATIME_NOW (1 << 7) 3026881f68fSopenharmony_ci#define FATTR_MTIME_NOW (1 << 8) 3036881f68fSopenharmony_ci#define FATTR_LOCKOWNER (1 << 9) 3046881f68fSopenharmony_ci#define FATTR_CTIME (1 << 10) 3056881f68fSopenharmony_ci#define FATTR_KILL_SUIDGID (1 << 11) 3066881f68fSopenharmony_ci 3076881f68fSopenharmony_ci/** 3086881f68fSopenharmony_ci * Flags returned by the OPEN request 3096881f68fSopenharmony_ci * 3106881f68fSopenharmony_ci * FOPEN_DIRECT_IO: bypass page cache for this open file 3116881f68fSopenharmony_ci * FOPEN_KEEP_CACHE: don't invalidate the data cache on open 3126881f68fSopenharmony_ci * FOPEN_NONSEEKABLE: the file is not seekable 3136881f68fSopenharmony_ci * FOPEN_CACHE_DIR: allow caching this directory 3146881f68fSopenharmony_ci * FOPEN_STREAM: the file is stream-like (no file position at all) 3156881f68fSopenharmony_ci * FOPEN_NOFLUSH: don't flush data cache on close (unless FUSE_WRITEBACK_CACHE) 3166881f68fSopenharmony_ci * FOPEN_PARALLEL_DIRECT_WRITES: Allow concurrent direct writes on the same inode 3176881f68fSopenharmony_ci */ 3186881f68fSopenharmony_ci#define FOPEN_DIRECT_IO (1 << 0) 3196881f68fSopenharmony_ci#define FOPEN_KEEP_CACHE (1 << 1) 3206881f68fSopenharmony_ci#define FOPEN_NONSEEKABLE (1 << 2) 3216881f68fSopenharmony_ci#define FOPEN_CACHE_DIR (1 << 3) 3226881f68fSopenharmony_ci#define FOPEN_STREAM (1 << 4) 3236881f68fSopenharmony_ci#define FOPEN_NOFLUSH (1 << 5) 3246881f68fSopenharmony_ci#define FOPEN_PARALLEL_DIRECT_WRITES (1 << 6) 3256881f68fSopenharmony_ci 3266881f68fSopenharmony_ci/** 3276881f68fSopenharmony_ci * INIT request/reply flags 3286881f68fSopenharmony_ci * 3296881f68fSopenharmony_ci * FUSE_ASYNC_READ: asynchronous read requests 3306881f68fSopenharmony_ci * FUSE_POSIX_LOCKS: remote locking for POSIX file locks 3316881f68fSopenharmony_ci * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported) 3326881f68fSopenharmony_ci * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem 3336881f68fSopenharmony_ci * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." 3346881f68fSopenharmony_ci * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB 3356881f68fSopenharmony_ci * FUSE_DONT_MASK: don't apply umask to file mode on create operations 3366881f68fSopenharmony_ci * FUSE_SPLICE_WRITE: kernel supports splice write on the device 3376881f68fSopenharmony_ci * FUSE_SPLICE_MOVE: kernel supports splice move on the device 3386881f68fSopenharmony_ci * FUSE_SPLICE_READ: kernel supports splice read on the device 3396881f68fSopenharmony_ci * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks 3406881f68fSopenharmony_ci * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories 3416881f68fSopenharmony_ci * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages 3426881f68fSopenharmony_ci * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one) 3436881f68fSopenharmony_ci * FUSE_READDIRPLUS_AUTO: adaptive readdirplus 3446881f68fSopenharmony_ci * FUSE_ASYNC_DIO: asynchronous direct I/O submission 3456881f68fSopenharmony_ci * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes 3466881f68fSopenharmony_ci * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens 3476881f68fSopenharmony_ci * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir 3486881f68fSopenharmony_ci * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc 3496881f68fSopenharmony_ci * FUSE_POSIX_ACL: filesystem supports posix acls 3506881f68fSopenharmony_ci * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED 3516881f68fSopenharmony_ci * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages 3526881f68fSopenharmony_ci * FUSE_CACHE_SYMLINKS: cache READLINK responses 3536881f68fSopenharmony_ci * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir 3546881f68fSopenharmony_ci * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request 3556881f68fSopenharmony_ci * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for 3566881f68fSopenharmony_ci * foffset and moffset fields in struct 3576881f68fSopenharmony_ci * fuse_setupmapping_out and fuse_removemapping_one. 3586881f68fSopenharmony_ci * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts 3596881f68fSopenharmony_ci * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc. 3606881f68fSopenharmony_ci * Upon write/truncate suid/sgid is only killed if caller 3616881f68fSopenharmony_ci * does not have CAP_FSETID. Additionally upon 3626881f68fSopenharmony_ci * write/truncate sgid is killed only if file has group 3636881f68fSopenharmony_ci * execute permission. (Same as Linux VFS behavior). 3646881f68fSopenharmony_ci * FUSE_SETXATTR_EXT: Server supports extended struct fuse_setxattr_in 3656881f68fSopenharmony_ci * FUSE_INIT_EXT: extended fuse_init_in request 3666881f68fSopenharmony_ci * FUSE_INIT_RESERVED: reserved, do not use 3676881f68fSopenharmony_ci * FUSE_SECURITY_CTX: add security context to create, mkdir, symlink, and 3686881f68fSopenharmony_ci * mknod 3696881f68fSopenharmony_ci * FUSE_HAS_INODE_DAX: use per inode DAX 3706881f68fSopenharmony_ci * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir, 3716881f68fSopenharmony_ci * symlink and mknod (single group that matches parent) 3726881f68fSopenharmony_ci */ 3736881f68fSopenharmony_ci#define FUSE_ASYNC_READ (1 << 0) 3746881f68fSopenharmony_ci#define FUSE_POSIX_LOCKS (1 << 1) 3756881f68fSopenharmony_ci#define FUSE_FILE_OPS (1 << 2) 3766881f68fSopenharmony_ci#define FUSE_ATOMIC_O_TRUNC (1 << 3) 3776881f68fSopenharmony_ci#define FUSE_EXPORT_SUPPORT (1 << 4) 3786881f68fSopenharmony_ci#define FUSE_BIG_WRITES (1 << 5) 3796881f68fSopenharmony_ci#define FUSE_DONT_MASK (1 << 6) 3806881f68fSopenharmony_ci#define FUSE_SPLICE_WRITE (1 << 7) 3816881f68fSopenharmony_ci#define FUSE_SPLICE_MOVE (1 << 8) 3826881f68fSopenharmony_ci#define FUSE_SPLICE_READ (1 << 9) 3836881f68fSopenharmony_ci#define FUSE_FLOCK_LOCKS (1 << 10) 3846881f68fSopenharmony_ci#define FUSE_HAS_IOCTL_DIR (1 << 11) 3856881f68fSopenharmony_ci#define FUSE_AUTO_INVAL_DATA (1 << 12) 3866881f68fSopenharmony_ci#define FUSE_DO_READDIRPLUS (1 << 13) 3876881f68fSopenharmony_ci#define FUSE_READDIRPLUS_AUTO (1 << 14) 3886881f68fSopenharmony_ci#define FUSE_ASYNC_DIO (1 << 15) 3896881f68fSopenharmony_ci#define FUSE_WRITEBACK_CACHE (1 << 16) 3906881f68fSopenharmony_ci#define FUSE_NO_OPEN_SUPPORT (1 << 17) 3916881f68fSopenharmony_ci#define FUSE_PARALLEL_DIROPS (1 << 18) 3926881f68fSopenharmony_ci#define FUSE_HANDLE_KILLPRIV (1 << 19) 3936881f68fSopenharmony_ci#define FUSE_POSIX_ACL (1 << 20) 3946881f68fSopenharmony_ci#define FUSE_ABORT_ERROR (1 << 21) 3956881f68fSopenharmony_ci#define FUSE_MAX_PAGES (1 << 22) 3966881f68fSopenharmony_ci#define FUSE_CACHE_SYMLINKS (1 << 23) 3976881f68fSopenharmony_ci#define FUSE_NO_OPENDIR_SUPPORT (1 << 24) 3986881f68fSopenharmony_ci#define FUSE_EXPLICIT_INVAL_DATA (1 << 25) 3996881f68fSopenharmony_ci#define FUSE_MAP_ALIGNMENT (1 << 26) 4006881f68fSopenharmony_ci#define FUSE_SUBMOUNTS (1 << 27) 4016881f68fSopenharmony_ci#define FUSE_HANDLE_KILLPRIV_V2 (1 << 28) 4026881f68fSopenharmony_ci#define FUSE_SETXATTR_EXT (1 << 29) 4036881f68fSopenharmony_ci#define FUSE_INIT_EXT (1 << 30) 4046881f68fSopenharmony_ci#define FUSE_INIT_RESERVED (1 << 31) 4056881f68fSopenharmony_ci/* bits 32..63 get shifted down 32 bits into the flags2 field */ 4066881f68fSopenharmony_ci#define FUSE_SECURITY_CTX (1ULL << 32) 4076881f68fSopenharmony_ci#define FUSE_HAS_INODE_DAX (1ULL << 33) 4086881f68fSopenharmony_ci#define FUSE_CREATE_SUPP_GROUP (1ULL << 34) 4096881f68fSopenharmony_ci 4106881f68fSopenharmony_ci/** 4116881f68fSopenharmony_ci * CUSE INIT request/reply flags 4126881f68fSopenharmony_ci * 4136881f68fSopenharmony_ci * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl 4146881f68fSopenharmony_ci */ 4156881f68fSopenharmony_ci#define CUSE_UNRESTRICTED_IOCTL (1 << 0) 4166881f68fSopenharmony_ci 4176881f68fSopenharmony_ci/** 4186881f68fSopenharmony_ci * Release flags 4196881f68fSopenharmony_ci */ 4206881f68fSopenharmony_ci#define FUSE_RELEASE_FLUSH (1 << 0) 4216881f68fSopenharmony_ci#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1) 4226881f68fSopenharmony_ci 4236881f68fSopenharmony_ci/** 4246881f68fSopenharmony_ci * Getattr flags 4256881f68fSopenharmony_ci */ 4266881f68fSopenharmony_ci#define FUSE_GETATTR_FH (1 << 0) 4276881f68fSopenharmony_ci 4286881f68fSopenharmony_ci/** 4296881f68fSopenharmony_ci * Lock flags 4306881f68fSopenharmony_ci */ 4316881f68fSopenharmony_ci#define FUSE_LK_FLOCK (1 << 0) 4326881f68fSopenharmony_ci 4336881f68fSopenharmony_ci/** 4346881f68fSopenharmony_ci * WRITE flags 4356881f68fSopenharmony_ci * 4366881f68fSopenharmony_ci * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed 4376881f68fSopenharmony_ci * FUSE_WRITE_LOCKOWNER: lock_owner field is valid 4386881f68fSopenharmony_ci * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits 4396881f68fSopenharmony_ci */ 4406881f68fSopenharmony_ci#define FUSE_WRITE_CACHE (1 << 0) 4416881f68fSopenharmony_ci#define FUSE_WRITE_LOCKOWNER (1 << 1) 4426881f68fSopenharmony_ci#define FUSE_WRITE_KILL_SUIDGID (1 << 2) 4436881f68fSopenharmony_ci 4446881f68fSopenharmony_ci/* Obsolete alias; this flag implies killing suid/sgid only. */ 4456881f68fSopenharmony_ci#define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID 4466881f68fSopenharmony_ci 4476881f68fSopenharmony_ci/** 4486881f68fSopenharmony_ci * Read flags 4496881f68fSopenharmony_ci */ 4506881f68fSopenharmony_ci#define FUSE_READ_LOCKOWNER (1 << 1) 4516881f68fSopenharmony_ci 4526881f68fSopenharmony_ci/** 4536881f68fSopenharmony_ci * Ioctl flags 4546881f68fSopenharmony_ci * 4556881f68fSopenharmony_ci * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine 4566881f68fSopenharmony_ci * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed 4576881f68fSopenharmony_ci * FUSE_IOCTL_RETRY: retry with new iovecs 4586881f68fSopenharmony_ci * FUSE_IOCTL_32BIT: 32bit ioctl 4596881f68fSopenharmony_ci * FUSE_IOCTL_DIR: is a directory 4606881f68fSopenharmony_ci * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t) 4616881f68fSopenharmony_ci * 4626881f68fSopenharmony_ci * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs 4636881f68fSopenharmony_ci */ 4646881f68fSopenharmony_ci#define FUSE_IOCTL_COMPAT (1 << 0) 4656881f68fSopenharmony_ci#define FUSE_IOCTL_UNRESTRICTED (1 << 1) 4666881f68fSopenharmony_ci#define FUSE_IOCTL_RETRY (1 << 2) 4676881f68fSopenharmony_ci#define FUSE_IOCTL_32BIT (1 << 3) 4686881f68fSopenharmony_ci#define FUSE_IOCTL_DIR (1 << 4) 4696881f68fSopenharmony_ci#define FUSE_IOCTL_COMPAT_X32 (1 << 5) 4706881f68fSopenharmony_ci 4716881f68fSopenharmony_ci#define FUSE_IOCTL_MAX_IOV 256 4726881f68fSopenharmony_ci 4736881f68fSopenharmony_ci/** 4746881f68fSopenharmony_ci * Poll flags 4756881f68fSopenharmony_ci * 4766881f68fSopenharmony_ci * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify 4776881f68fSopenharmony_ci */ 4786881f68fSopenharmony_ci#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) 4796881f68fSopenharmony_ci 4806881f68fSopenharmony_ci/** 4816881f68fSopenharmony_ci * Fsync flags 4826881f68fSopenharmony_ci * 4836881f68fSopenharmony_ci * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata 4846881f68fSopenharmony_ci */ 4856881f68fSopenharmony_ci#define FUSE_FSYNC_FDATASYNC (1 << 0) 4866881f68fSopenharmony_ci 4876881f68fSopenharmony_ci/** 4886881f68fSopenharmony_ci * fuse_attr flags 4896881f68fSopenharmony_ci * 4906881f68fSopenharmony_ci * FUSE_ATTR_SUBMOUNT: Object is a submount root 4916881f68fSopenharmony_ci * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode 4926881f68fSopenharmony_ci */ 4936881f68fSopenharmony_ci#define FUSE_ATTR_SUBMOUNT (1 << 0) 4946881f68fSopenharmony_ci#define FUSE_ATTR_DAX (1 << 1) 4956881f68fSopenharmony_ci 4966881f68fSopenharmony_ci/** 4976881f68fSopenharmony_ci * Open flags 4986881f68fSopenharmony_ci * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable 4996881f68fSopenharmony_ci */ 5006881f68fSopenharmony_ci#define FUSE_OPEN_KILL_SUIDGID (1 << 0) 5016881f68fSopenharmony_ci 5026881f68fSopenharmony_ci/** 5036881f68fSopenharmony_ci * setxattr flags 5046881f68fSopenharmony_ci * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set 5056881f68fSopenharmony_ci */ 5066881f68fSopenharmony_ci#define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0) 5076881f68fSopenharmony_ci 5086881f68fSopenharmony_ci/** 5096881f68fSopenharmony_ci * notify_inval_entry flags 5106881f68fSopenharmony_ci * FUSE_EXPIRE_ONLY 5116881f68fSopenharmony_ci */ 5126881f68fSopenharmony_ci#define FUSE_EXPIRE_ONLY (1 << 0) 5136881f68fSopenharmony_ci 5146881f68fSopenharmony_ci/** 5156881f68fSopenharmony_ci * extension type 5166881f68fSopenharmony_ci * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx 5176881f68fSopenharmony_ci * FUSE_EXT_GROUPS: &fuse_supp_groups extension 5186881f68fSopenharmony_ci */ 5196881f68fSopenharmony_cienum fuse_ext_type { 5206881f68fSopenharmony_ci /* Types 0..31 are reserved for fuse_secctx_header */ 5216881f68fSopenharmony_ci FUSE_MAX_NR_SECCTX = 31, 5226881f68fSopenharmony_ci FUSE_EXT_GROUPS = 32, 5236881f68fSopenharmony_ci}; 5246881f68fSopenharmony_ci 5256881f68fSopenharmony_cienum fuse_opcode { 5266881f68fSopenharmony_ci FUSE_LOOKUP = 1, 5276881f68fSopenharmony_ci FUSE_FORGET = 2, /* no reply */ 5286881f68fSopenharmony_ci FUSE_GETATTR = 3, 5296881f68fSopenharmony_ci FUSE_SETATTR = 4, 5306881f68fSopenharmony_ci FUSE_READLINK = 5, 5316881f68fSopenharmony_ci FUSE_SYMLINK = 6, 5326881f68fSopenharmony_ci FUSE_MKNOD = 8, 5336881f68fSopenharmony_ci FUSE_MKDIR = 9, 5346881f68fSopenharmony_ci FUSE_UNLINK = 10, 5356881f68fSopenharmony_ci FUSE_RMDIR = 11, 5366881f68fSopenharmony_ci FUSE_RENAME = 12, 5376881f68fSopenharmony_ci FUSE_LINK = 13, 5386881f68fSopenharmony_ci FUSE_OPEN = 14, 5396881f68fSopenharmony_ci FUSE_READ = 15, 5406881f68fSopenharmony_ci FUSE_WRITE = 16, 5416881f68fSopenharmony_ci FUSE_STATFS = 17, 5426881f68fSopenharmony_ci FUSE_RELEASE = 18, 5436881f68fSopenharmony_ci FUSE_FSYNC = 20, 5446881f68fSopenharmony_ci FUSE_SETXATTR = 21, 5456881f68fSopenharmony_ci FUSE_GETXATTR = 22, 5466881f68fSopenharmony_ci FUSE_LISTXATTR = 23, 5476881f68fSopenharmony_ci FUSE_REMOVEXATTR = 24, 5486881f68fSopenharmony_ci FUSE_FLUSH = 25, 5496881f68fSopenharmony_ci FUSE_INIT = 26, 5506881f68fSopenharmony_ci FUSE_OPENDIR = 27, 5516881f68fSopenharmony_ci FUSE_READDIR = 28, 5526881f68fSopenharmony_ci FUSE_RELEASEDIR = 29, 5536881f68fSopenharmony_ci FUSE_FSYNCDIR = 30, 5546881f68fSopenharmony_ci FUSE_GETLK = 31, 5556881f68fSopenharmony_ci FUSE_SETLK = 32, 5566881f68fSopenharmony_ci FUSE_SETLKW = 33, 5576881f68fSopenharmony_ci FUSE_ACCESS = 34, 5586881f68fSopenharmony_ci FUSE_CREATE = 35, 5596881f68fSopenharmony_ci FUSE_INTERRUPT = 36, 5606881f68fSopenharmony_ci FUSE_BMAP = 37, 5616881f68fSopenharmony_ci FUSE_DESTROY = 38, 5626881f68fSopenharmony_ci FUSE_IOCTL = 39, 5636881f68fSopenharmony_ci FUSE_POLL = 40, 5646881f68fSopenharmony_ci FUSE_NOTIFY_REPLY = 41, 5656881f68fSopenharmony_ci FUSE_BATCH_FORGET = 42, 5666881f68fSopenharmony_ci FUSE_FALLOCATE = 43, 5676881f68fSopenharmony_ci FUSE_READDIRPLUS = 44, 5686881f68fSopenharmony_ci FUSE_RENAME2 = 45, 5696881f68fSopenharmony_ci FUSE_LSEEK = 46, 5706881f68fSopenharmony_ci FUSE_COPY_FILE_RANGE = 47, 5716881f68fSopenharmony_ci FUSE_SETUPMAPPING = 48, 5726881f68fSopenharmony_ci FUSE_REMOVEMAPPING = 49, 5736881f68fSopenharmony_ci FUSE_SYNCFS = 50, 5746881f68fSopenharmony_ci FUSE_TMPFILE = 51, 5756881f68fSopenharmony_ci 5766881f68fSopenharmony_ci /* CUSE specific operations */ 5776881f68fSopenharmony_ci CUSE_INIT = 4096, 5786881f68fSopenharmony_ci 5796881f68fSopenharmony_ci /* Reserved opcodes: helpful to detect structure endian-ness */ 5806881f68fSopenharmony_ci CUSE_INIT_BSWAP_RESERVED = 1048576, /* CUSE_INIT << 8 */ 5816881f68fSopenharmony_ci FUSE_INIT_BSWAP_RESERVED = 436207616, /* FUSE_INIT << 24 */ 5826881f68fSopenharmony_ci}; 5836881f68fSopenharmony_ci 5846881f68fSopenharmony_cienum fuse_notify_code { 5856881f68fSopenharmony_ci FUSE_NOTIFY_POLL = 1, 5866881f68fSopenharmony_ci FUSE_NOTIFY_INVAL_INODE = 2, 5876881f68fSopenharmony_ci FUSE_NOTIFY_INVAL_ENTRY = 3, 5886881f68fSopenharmony_ci FUSE_NOTIFY_STORE = 4, 5896881f68fSopenharmony_ci FUSE_NOTIFY_RETRIEVE = 5, 5906881f68fSopenharmony_ci FUSE_NOTIFY_DELETE = 6, 5916881f68fSopenharmony_ci FUSE_NOTIFY_CODE_MAX, 5926881f68fSopenharmony_ci}; 5936881f68fSopenharmony_ci 5946881f68fSopenharmony_ci/* The read buffer is required to be at least 8k, but may be much larger */ 5956881f68fSopenharmony_ci#define FUSE_MIN_READ_BUFFER 8192 5966881f68fSopenharmony_ci 5976881f68fSopenharmony_ci#define FUSE_COMPAT_ENTRY_OUT_SIZE 120 5986881f68fSopenharmony_ci 5996881f68fSopenharmony_cistruct fuse_entry_out { 6006881f68fSopenharmony_ci uint64_t nodeid; /* Inode ID */ 6016881f68fSopenharmony_ci uint64_t generation; /* Inode generation: nodeid:gen must 6026881f68fSopenharmony_ci be unique for the fs's lifetime */ 6036881f68fSopenharmony_ci uint64_t entry_valid; /* Cache timeout for the name */ 6046881f68fSopenharmony_ci uint64_t attr_valid; /* Cache timeout for the attributes */ 6056881f68fSopenharmony_ci uint32_t entry_valid_nsec; 6066881f68fSopenharmony_ci uint32_t attr_valid_nsec; 6076881f68fSopenharmony_ci struct fuse_attr attr; 6086881f68fSopenharmony_ci}; 6096881f68fSopenharmony_ci 6106881f68fSopenharmony_cistruct fuse_forget_in { 6116881f68fSopenharmony_ci uint64_t nlookup; 6126881f68fSopenharmony_ci}; 6136881f68fSopenharmony_ci 6146881f68fSopenharmony_cistruct fuse_forget_one { 6156881f68fSopenharmony_ci uint64_t nodeid; 6166881f68fSopenharmony_ci uint64_t nlookup; 6176881f68fSopenharmony_ci}; 6186881f68fSopenharmony_ci 6196881f68fSopenharmony_cistruct fuse_batch_forget_in { 6206881f68fSopenharmony_ci uint32_t count; 6216881f68fSopenharmony_ci uint32_t dummy; 6226881f68fSopenharmony_ci}; 6236881f68fSopenharmony_ci 6246881f68fSopenharmony_cistruct fuse_getattr_in { 6256881f68fSopenharmony_ci uint32_t getattr_flags; 6266881f68fSopenharmony_ci uint32_t dummy; 6276881f68fSopenharmony_ci uint64_t fh; 6286881f68fSopenharmony_ci}; 6296881f68fSopenharmony_ci 6306881f68fSopenharmony_ci#define FUSE_COMPAT_ATTR_OUT_SIZE 96 6316881f68fSopenharmony_ci 6326881f68fSopenharmony_cistruct fuse_attr_out { 6336881f68fSopenharmony_ci uint64_t attr_valid; /* Cache timeout for the attributes */ 6346881f68fSopenharmony_ci uint32_t attr_valid_nsec; 6356881f68fSopenharmony_ci uint32_t dummy; 6366881f68fSopenharmony_ci struct fuse_attr attr; 6376881f68fSopenharmony_ci}; 6386881f68fSopenharmony_ci 6396881f68fSopenharmony_ci#define FUSE_COMPAT_MKNOD_IN_SIZE 8 6406881f68fSopenharmony_ci 6416881f68fSopenharmony_cistruct fuse_mknod_in { 6426881f68fSopenharmony_ci uint32_t mode; 6436881f68fSopenharmony_ci uint32_t rdev; 6446881f68fSopenharmony_ci uint32_t umask; 6456881f68fSopenharmony_ci uint32_t padding; 6466881f68fSopenharmony_ci}; 6476881f68fSopenharmony_ci 6486881f68fSopenharmony_cistruct fuse_mkdir_in { 6496881f68fSopenharmony_ci uint32_t mode; 6506881f68fSopenharmony_ci uint32_t umask; 6516881f68fSopenharmony_ci}; 6526881f68fSopenharmony_ci 6536881f68fSopenharmony_cistruct fuse_rename_in { 6546881f68fSopenharmony_ci uint64_t newdir; 6556881f68fSopenharmony_ci}; 6566881f68fSopenharmony_ci 6576881f68fSopenharmony_cistruct fuse_rename2_in { 6586881f68fSopenharmony_ci uint64_t newdir; 6596881f68fSopenharmony_ci uint32_t flags; 6606881f68fSopenharmony_ci uint32_t padding; 6616881f68fSopenharmony_ci}; 6626881f68fSopenharmony_ci 6636881f68fSopenharmony_cistruct fuse_link_in { 6646881f68fSopenharmony_ci uint64_t oldnodeid; 6656881f68fSopenharmony_ci}; 6666881f68fSopenharmony_ci 6676881f68fSopenharmony_cistruct fuse_setattr_in { 6686881f68fSopenharmony_ci uint32_t valid; 6696881f68fSopenharmony_ci uint32_t padding; 6706881f68fSopenharmony_ci uint64_t fh; 6716881f68fSopenharmony_ci uint64_t size; 6726881f68fSopenharmony_ci uint64_t lock_owner; 6736881f68fSopenharmony_ci uint64_t atime; 6746881f68fSopenharmony_ci uint64_t mtime; 6756881f68fSopenharmony_ci uint64_t ctime; 6766881f68fSopenharmony_ci uint32_t atimensec; 6776881f68fSopenharmony_ci uint32_t mtimensec; 6786881f68fSopenharmony_ci uint32_t ctimensec; 6796881f68fSopenharmony_ci uint32_t mode; 6806881f68fSopenharmony_ci uint32_t unused4; 6816881f68fSopenharmony_ci uint32_t uid; 6826881f68fSopenharmony_ci uint32_t gid; 6836881f68fSopenharmony_ci uint32_t unused5; 6846881f68fSopenharmony_ci}; 6856881f68fSopenharmony_ci 6866881f68fSopenharmony_cistruct fuse_open_in { 6876881f68fSopenharmony_ci uint32_t flags; 6886881f68fSopenharmony_ci uint32_t open_flags; /* FUSE_OPEN_... */ 6896881f68fSopenharmony_ci}; 6906881f68fSopenharmony_ci 6916881f68fSopenharmony_cistruct fuse_create_in { 6926881f68fSopenharmony_ci uint32_t flags; 6936881f68fSopenharmony_ci uint32_t mode; 6946881f68fSopenharmony_ci uint32_t umask; 6956881f68fSopenharmony_ci uint32_t open_flags; /* FUSE_OPEN_... */ 6966881f68fSopenharmony_ci}; 6976881f68fSopenharmony_ci 6986881f68fSopenharmony_cistruct fuse_open_out { 6996881f68fSopenharmony_ci uint64_t fh; 7006881f68fSopenharmony_ci uint32_t open_flags; 7016881f68fSopenharmony_ci uint32_t padding; 7026881f68fSopenharmony_ci}; 7036881f68fSopenharmony_ci 7046881f68fSopenharmony_cistruct fuse_release_in { 7056881f68fSopenharmony_ci uint64_t fh; 7066881f68fSopenharmony_ci uint32_t flags; 7076881f68fSopenharmony_ci uint32_t release_flags; 7086881f68fSopenharmony_ci uint64_t lock_owner; 7096881f68fSopenharmony_ci}; 7106881f68fSopenharmony_ci 7116881f68fSopenharmony_cistruct fuse_flush_in { 7126881f68fSopenharmony_ci uint64_t fh; 7136881f68fSopenharmony_ci uint32_t unused; 7146881f68fSopenharmony_ci uint32_t padding; 7156881f68fSopenharmony_ci uint64_t lock_owner; 7166881f68fSopenharmony_ci}; 7176881f68fSopenharmony_ci 7186881f68fSopenharmony_cistruct fuse_read_in { 7196881f68fSopenharmony_ci uint64_t fh; 7206881f68fSopenharmony_ci uint64_t offset; 7216881f68fSopenharmony_ci uint32_t size; 7226881f68fSopenharmony_ci uint32_t read_flags; 7236881f68fSopenharmony_ci uint64_t lock_owner; 7246881f68fSopenharmony_ci uint32_t flags; 7256881f68fSopenharmony_ci uint32_t padding; 7266881f68fSopenharmony_ci}; 7276881f68fSopenharmony_ci 7286881f68fSopenharmony_ci#define FUSE_COMPAT_WRITE_IN_SIZE 24 7296881f68fSopenharmony_ci 7306881f68fSopenharmony_cistruct fuse_write_in { 7316881f68fSopenharmony_ci uint64_t fh; 7326881f68fSopenharmony_ci uint64_t offset; 7336881f68fSopenharmony_ci uint32_t size; 7346881f68fSopenharmony_ci uint32_t write_flags; 7356881f68fSopenharmony_ci uint64_t lock_owner; 7366881f68fSopenharmony_ci uint32_t flags; 7376881f68fSopenharmony_ci uint32_t padding; 7386881f68fSopenharmony_ci}; 7396881f68fSopenharmony_ci 7406881f68fSopenharmony_cistruct fuse_write_out { 7416881f68fSopenharmony_ci uint32_t size; 7426881f68fSopenharmony_ci uint32_t padding; 7436881f68fSopenharmony_ci}; 7446881f68fSopenharmony_ci 7456881f68fSopenharmony_ci#define FUSE_COMPAT_STATFS_SIZE 48 7466881f68fSopenharmony_ci 7476881f68fSopenharmony_cistruct fuse_statfs_out { 7486881f68fSopenharmony_ci struct fuse_kstatfs st; 7496881f68fSopenharmony_ci}; 7506881f68fSopenharmony_ci 7516881f68fSopenharmony_cistruct fuse_fsync_in { 7526881f68fSopenharmony_ci uint64_t fh; 7536881f68fSopenharmony_ci uint32_t fsync_flags; 7546881f68fSopenharmony_ci uint32_t padding; 7556881f68fSopenharmony_ci}; 7566881f68fSopenharmony_ci 7576881f68fSopenharmony_ci#define FUSE_COMPAT_SETXATTR_IN_SIZE 8 7586881f68fSopenharmony_ci 7596881f68fSopenharmony_cistruct fuse_setxattr_in { 7606881f68fSopenharmony_ci uint32_t size; 7616881f68fSopenharmony_ci uint32_t flags; 7626881f68fSopenharmony_ci uint32_t setxattr_flags; 7636881f68fSopenharmony_ci uint32_t padding; 7646881f68fSopenharmony_ci}; 7656881f68fSopenharmony_ci 7666881f68fSopenharmony_cistruct fuse_getxattr_in { 7676881f68fSopenharmony_ci uint32_t size; 7686881f68fSopenharmony_ci uint32_t padding; 7696881f68fSopenharmony_ci}; 7706881f68fSopenharmony_ci 7716881f68fSopenharmony_cistruct fuse_getxattr_out { 7726881f68fSopenharmony_ci uint32_t size; 7736881f68fSopenharmony_ci uint32_t padding; 7746881f68fSopenharmony_ci}; 7756881f68fSopenharmony_ci 7766881f68fSopenharmony_cistruct fuse_lk_in { 7776881f68fSopenharmony_ci uint64_t fh; 7786881f68fSopenharmony_ci uint64_t owner; 7796881f68fSopenharmony_ci struct fuse_file_lock lk; 7806881f68fSopenharmony_ci uint32_t lk_flags; 7816881f68fSopenharmony_ci uint32_t padding; 7826881f68fSopenharmony_ci}; 7836881f68fSopenharmony_ci 7846881f68fSopenharmony_cistruct fuse_lk_out { 7856881f68fSopenharmony_ci struct fuse_file_lock lk; 7866881f68fSopenharmony_ci}; 7876881f68fSopenharmony_ci 7886881f68fSopenharmony_cistruct fuse_access_in { 7896881f68fSopenharmony_ci uint32_t mask; 7906881f68fSopenharmony_ci uint32_t padding; 7916881f68fSopenharmony_ci}; 7926881f68fSopenharmony_ci 7936881f68fSopenharmony_cistruct fuse_init_in { 7946881f68fSopenharmony_ci uint32_t major; 7956881f68fSopenharmony_ci uint32_t minor; 7966881f68fSopenharmony_ci uint32_t max_readahead; 7976881f68fSopenharmony_ci uint32_t flags; 7986881f68fSopenharmony_ci uint32_t flags2; 7996881f68fSopenharmony_ci uint32_t unused[11]; 8006881f68fSopenharmony_ci}; 8016881f68fSopenharmony_ci 8026881f68fSopenharmony_ci#define FUSE_COMPAT_INIT_OUT_SIZE 8 8036881f68fSopenharmony_ci#define FUSE_COMPAT_22_INIT_OUT_SIZE 24 8046881f68fSopenharmony_ci 8056881f68fSopenharmony_cistruct fuse_init_out { 8066881f68fSopenharmony_ci uint32_t major; 8076881f68fSopenharmony_ci uint32_t minor; 8086881f68fSopenharmony_ci uint32_t max_readahead; 8096881f68fSopenharmony_ci uint32_t flags; 8106881f68fSopenharmony_ci uint16_t max_background; 8116881f68fSopenharmony_ci uint16_t congestion_threshold; 8126881f68fSopenharmony_ci uint32_t max_write; 8136881f68fSopenharmony_ci uint32_t time_gran; 8146881f68fSopenharmony_ci uint16_t max_pages; 8156881f68fSopenharmony_ci uint16_t map_alignment; 8166881f68fSopenharmony_ci uint32_t flags2; 8176881f68fSopenharmony_ci uint32_t unused[7]; 8186881f68fSopenharmony_ci}; 8196881f68fSopenharmony_ci 8206881f68fSopenharmony_ci#define CUSE_INIT_INFO_MAX 4096 8216881f68fSopenharmony_ci 8226881f68fSopenharmony_cistruct cuse_init_in { 8236881f68fSopenharmony_ci uint32_t major; 8246881f68fSopenharmony_ci uint32_t minor; 8256881f68fSopenharmony_ci uint32_t unused; 8266881f68fSopenharmony_ci uint32_t flags; 8276881f68fSopenharmony_ci}; 8286881f68fSopenharmony_ci 8296881f68fSopenharmony_cistruct cuse_init_out { 8306881f68fSopenharmony_ci uint32_t major; 8316881f68fSopenharmony_ci uint32_t minor; 8326881f68fSopenharmony_ci uint32_t unused; 8336881f68fSopenharmony_ci uint32_t flags; 8346881f68fSopenharmony_ci uint32_t max_read; 8356881f68fSopenharmony_ci uint32_t max_write; 8366881f68fSopenharmony_ci uint32_t dev_major; /* chardev major */ 8376881f68fSopenharmony_ci uint32_t dev_minor; /* chardev minor */ 8386881f68fSopenharmony_ci uint32_t spare[10]; 8396881f68fSopenharmony_ci}; 8406881f68fSopenharmony_ci 8416881f68fSopenharmony_cistruct fuse_interrupt_in { 8426881f68fSopenharmony_ci uint64_t unique; 8436881f68fSopenharmony_ci}; 8446881f68fSopenharmony_ci 8456881f68fSopenharmony_cistruct fuse_bmap_in { 8466881f68fSopenharmony_ci uint64_t block; 8476881f68fSopenharmony_ci uint32_t blocksize; 8486881f68fSopenharmony_ci uint32_t padding; 8496881f68fSopenharmony_ci}; 8506881f68fSopenharmony_ci 8516881f68fSopenharmony_cistruct fuse_bmap_out { 8526881f68fSopenharmony_ci uint64_t block; 8536881f68fSopenharmony_ci}; 8546881f68fSopenharmony_ci 8556881f68fSopenharmony_cistruct fuse_ioctl_in { 8566881f68fSopenharmony_ci uint64_t fh; 8576881f68fSopenharmony_ci uint32_t flags; 8586881f68fSopenharmony_ci uint32_t cmd; 8596881f68fSopenharmony_ci uint64_t arg; 8606881f68fSopenharmony_ci uint32_t in_size; 8616881f68fSopenharmony_ci uint32_t out_size; 8626881f68fSopenharmony_ci}; 8636881f68fSopenharmony_ci 8646881f68fSopenharmony_cistruct fuse_ioctl_iovec { 8656881f68fSopenharmony_ci uint64_t base; 8666881f68fSopenharmony_ci uint64_t len; 8676881f68fSopenharmony_ci}; 8686881f68fSopenharmony_ci 8696881f68fSopenharmony_cistruct fuse_ioctl_out { 8706881f68fSopenharmony_ci int32_t result; 8716881f68fSopenharmony_ci uint32_t flags; 8726881f68fSopenharmony_ci uint32_t in_iovs; 8736881f68fSopenharmony_ci uint32_t out_iovs; 8746881f68fSopenharmony_ci}; 8756881f68fSopenharmony_ci 8766881f68fSopenharmony_cistruct fuse_poll_in { 8776881f68fSopenharmony_ci uint64_t fh; 8786881f68fSopenharmony_ci uint64_t kh; 8796881f68fSopenharmony_ci uint32_t flags; 8806881f68fSopenharmony_ci uint32_t events; 8816881f68fSopenharmony_ci}; 8826881f68fSopenharmony_ci 8836881f68fSopenharmony_cistruct fuse_poll_out { 8846881f68fSopenharmony_ci uint32_t revents; 8856881f68fSopenharmony_ci uint32_t padding; 8866881f68fSopenharmony_ci}; 8876881f68fSopenharmony_ci 8886881f68fSopenharmony_cistruct fuse_notify_poll_wakeup_out { 8896881f68fSopenharmony_ci uint64_t kh; 8906881f68fSopenharmony_ci}; 8916881f68fSopenharmony_ci 8926881f68fSopenharmony_cistruct fuse_fallocate_in { 8936881f68fSopenharmony_ci uint64_t fh; 8946881f68fSopenharmony_ci uint64_t offset; 8956881f68fSopenharmony_ci uint64_t length; 8966881f68fSopenharmony_ci uint32_t mode; 8976881f68fSopenharmony_ci uint32_t padding; 8986881f68fSopenharmony_ci}; 8996881f68fSopenharmony_ci 9006881f68fSopenharmony_cistruct fuse_in_header { 9016881f68fSopenharmony_ci uint32_t len; 9026881f68fSopenharmony_ci uint32_t opcode; 9036881f68fSopenharmony_ci uint64_t unique; 9046881f68fSopenharmony_ci uint64_t nodeid; 9056881f68fSopenharmony_ci uint32_t uid; 9066881f68fSopenharmony_ci uint32_t gid; 9076881f68fSopenharmony_ci uint32_t pid; 9086881f68fSopenharmony_ci uint16_t total_extlen; /* length of extensions in 8byte units */ 9096881f68fSopenharmony_ci uint16_t padding; 9106881f68fSopenharmony_ci}; 9116881f68fSopenharmony_ci 9126881f68fSopenharmony_cistruct fuse_out_header { 9136881f68fSopenharmony_ci uint32_t len; 9146881f68fSopenharmony_ci int32_t error; 9156881f68fSopenharmony_ci uint64_t unique; 9166881f68fSopenharmony_ci}; 9176881f68fSopenharmony_ci 9186881f68fSopenharmony_cistruct fuse_dirent { 9196881f68fSopenharmony_ci uint64_t ino; 9206881f68fSopenharmony_ci uint64_t off; 9216881f68fSopenharmony_ci uint32_t namelen; 9226881f68fSopenharmony_ci uint32_t type; 9236881f68fSopenharmony_ci char name[]; 9246881f68fSopenharmony_ci}; 9256881f68fSopenharmony_ci 9266881f68fSopenharmony_ci/* Align variable length records to 64bit boundary */ 9276881f68fSopenharmony_ci#define FUSE_REC_ALIGN(x) \ 9286881f68fSopenharmony_ci (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) 9296881f68fSopenharmony_ci 9306881f68fSopenharmony_ci#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) 9316881f68fSopenharmony_ci#define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x) 9326881f68fSopenharmony_ci#define FUSE_DIRENT_SIZE(d) \ 9336881f68fSopenharmony_ci FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) 9346881f68fSopenharmony_ci 9356881f68fSopenharmony_cistruct fuse_direntplus { 9366881f68fSopenharmony_ci struct fuse_entry_out entry_out; 9376881f68fSopenharmony_ci struct fuse_dirent dirent; 9386881f68fSopenharmony_ci}; 9396881f68fSopenharmony_ci 9406881f68fSopenharmony_ci#define FUSE_NAME_OFFSET_DIRENTPLUS \ 9416881f68fSopenharmony_ci offsetof(struct fuse_direntplus, dirent.name) 9426881f68fSopenharmony_ci#define FUSE_DIRENTPLUS_SIZE(d) \ 9436881f68fSopenharmony_ci FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen) 9446881f68fSopenharmony_ci 9456881f68fSopenharmony_cistruct fuse_notify_inval_inode_out { 9466881f68fSopenharmony_ci uint64_t ino; 9476881f68fSopenharmony_ci int64_t off; 9486881f68fSopenharmony_ci int64_t len; 9496881f68fSopenharmony_ci}; 9506881f68fSopenharmony_ci 9516881f68fSopenharmony_cistruct fuse_notify_inval_entry_out { 9526881f68fSopenharmony_ci uint64_t parent; 9536881f68fSopenharmony_ci uint32_t namelen; 9546881f68fSopenharmony_ci uint32_t flags; 9556881f68fSopenharmony_ci}; 9566881f68fSopenharmony_ci 9576881f68fSopenharmony_cistruct fuse_notify_delete_out { 9586881f68fSopenharmony_ci uint64_t parent; 9596881f68fSopenharmony_ci uint64_t child; 9606881f68fSopenharmony_ci uint32_t namelen; 9616881f68fSopenharmony_ci uint32_t padding; 9626881f68fSopenharmony_ci}; 9636881f68fSopenharmony_ci 9646881f68fSopenharmony_cistruct fuse_notify_store_out { 9656881f68fSopenharmony_ci uint64_t nodeid; 9666881f68fSopenharmony_ci uint64_t offset; 9676881f68fSopenharmony_ci uint32_t size; 9686881f68fSopenharmony_ci uint32_t padding; 9696881f68fSopenharmony_ci}; 9706881f68fSopenharmony_ci 9716881f68fSopenharmony_cistruct fuse_notify_retrieve_out { 9726881f68fSopenharmony_ci uint64_t notify_unique; 9736881f68fSopenharmony_ci uint64_t nodeid; 9746881f68fSopenharmony_ci uint64_t offset; 9756881f68fSopenharmony_ci uint32_t size; 9766881f68fSopenharmony_ci uint32_t padding; 9776881f68fSopenharmony_ci}; 9786881f68fSopenharmony_ci 9796881f68fSopenharmony_ci/* Matches the size of fuse_write_in */ 9806881f68fSopenharmony_cistruct fuse_notify_retrieve_in { 9816881f68fSopenharmony_ci uint64_t dummy1; 9826881f68fSopenharmony_ci uint64_t offset; 9836881f68fSopenharmony_ci uint32_t size; 9846881f68fSopenharmony_ci uint32_t dummy2; 9856881f68fSopenharmony_ci uint64_t dummy3; 9866881f68fSopenharmony_ci uint64_t dummy4; 9876881f68fSopenharmony_ci}; 9886881f68fSopenharmony_ci 9896881f68fSopenharmony_ci/* Device ioctls: */ 9906881f68fSopenharmony_ci#define FUSE_DEV_IOC_MAGIC 229 9916881f68fSopenharmony_ci#define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t) 9926881f68fSopenharmony_ci 9936881f68fSopenharmony_cistruct fuse_lseek_in { 9946881f68fSopenharmony_ci uint64_t fh; 9956881f68fSopenharmony_ci uint64_t offset; 9966881f68fSopenharmony_ci uint32_t whence; 9976881f68fSopenharmony_ci uint32_t padding; 9986881f68fSopenharmony_ci}; 9996881f68fSopenharmony_ci 10006881f68fSopenharmony_cistruct fuse_lseek_out { 10016881f68fSopenharmony_ci uint64_t offset; 10026881f68fSopenharmony_ci}; 10036881f68fSopenharmony_ci 10046881f68fSopenharmony_cistruct fuse_copy_file_range_in { 10056881f68fSopenharmony_ci uint64_t fh_in; 10066881f68fSopenharmony_ci uint64_t off_in; 10076881f68fSopenharmony_ci uint64_t nodeid_out; 10086881f68fSopenharmony_ci uint64_t fh_out; 10096881f68fSopenharmony_ci uint64_t off_out; 10106881f68fSopenharmony_ci uint64_t len; 10116881f68fSopenharmony_ci uint64_t flags; 10126881f68fSopenharmony_ci}; 10136881f68fSopenharmony_ci 10146881f68fSopenharmony_ci#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0) 10156881f68fSopenharmony_ci#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1) 10166881f68fSopenharmony_cistruct fuse_setupmapping_in { 10176881f68fSopenharmony_ci /* An already open handle */ 10186881f68fSopenharmony_ci uint64_t fh; 10196881f68fSopenharmony_ci /* Offset into the file to start the mapping */ 10206881f68fSopenharmony_ci uint64_t foffset; 10216881f68fSopenharmony_ci /* Length of mapping required */ 10226881f68fSopenharmony_ci uint64_t len; 10236881f68fSopenharmony_ci /* Flags, FUSE_SETUPMAPPING_FLAG_* */ 10246881f68fSopenharmony_ci uint64_t flags; 10256881f68fSopenharmony_ci /* Offset in Memory Window */ 10266881f68fSopenharmony_ci uint64_t moffset; 10276881f68fSopenharmony_ci}; 10286881f68fSopenharmony_ci 10296881f68fSopenharmony_cistruct fuse_removemapping_in { 10306881f68fSopenharmony_ci /* number of fuse_removemapping_one follows */ 10316881f68fSopenharmony_ci uint32_t count; 10326881f68fSopenharmony_ci}; 10336881f68fSopenharmony_ci 10346881f68fSopenharmony_cistruct fuse_removemapping_one { 10356881f68fSopenharmony_ci /* Offset into the dax window start the unmapping */ 10366881f68fSopenharmony_ci uint64_t moffset; 10376881f68fSopenharmony_ci /* Length of mapping required */ 10386881f68fSopenharmony_ci uint64_t len; 10396881f68fSopenharmony_ci}; 10406881f68fSopenharmony_ci 10416881f68fSopenharmony_ci#define FUSE_REMOVEMAPPING_MAX_ENTRY \ 10426881f68fSopenharmony_ci (PAGE_SIZE / sizeof(struct fuse_removemapping_one)) 10436881f68fSopenharmony_ci 10446881f68fSopenharmony_cistruct fuse_syncfs_in { 10456881f68fSopenharmony_ci uint64_t padding; 10466881f68fSopenharmony_ci}; 10476881f68fSopenharmony_ci 10486881f68fSopenharmony_ci/* 10496881f68fSopenharmony_ci * For each security context, send fuse_secctx with size of security context 10506881f68fSopenharmony_ci * fuse_secctx will be followed by security context name and this in turn 10516881f68fSopenharmony_ci * will be followed by actual context label. 10526881f68fSopenharmony_ci * fuse_secctx, name, context 10536881f68fSopenharmony_ci */ 10546881f68fSopenharmony_cistruct fuse_secctx { 10556881f68fSopenharmony_ci uint32_t size; 10566881f68fSopenharmony_ci uint32_t padding; 10576881f68fSopenharmony_ci}; 10586881f68fSopenharmony_ci 10596881f68fSopenharmony_ci/* 10606881f68fSopenharmony_ci * Contains the information about how many fuse_secctx structures are being 10616881f68fSopenharmony_ci * sent and what's the total size of all security contexts (including 10626881f68fSopenharmony_ci * size of fuse_secctx_header). 10636881f68fSopenharmony_ci * 10646881f68fSopenharmony_ci */ 10656881f68fSopenharmony_cistruct fuse_secctx_header { 10666881f68fSopenharmony_ci uint32_t size; 10676881f68fSopenharmony_ci uint32_t nr_secctx; 10686881f68fSopenharmony_ci}; 10696881f68fSopenharmony_ci 10706881f68fSopenharmony_ci/** 10716881f68fSopenharmony_ci * struct fuse_ext_header - extension header 10726881f68fSopenharmony_ci * @size: total size of this extension including this header 10736881f68fSopenharmony_ci * @type: type of extension 10746881f68fSopenharmony_ci * 10756881f68fSopenharmony_ci * This is made compatible with fuse_secctx_header by using type values > 10766881f68fSopenharmony_ci * FUSE_MAX_NR_SECCTX 10776881f68fSopenharmony_ci */ 10786881f68fSopenharmony_cistruct fuse_ext_header { 10796881f68fSopenharmony_ci uint32_t size; 10806881f68fSopenharmony_ci uint32_t type; 10816881f68fSopenharmony_ci}; 10826881f68fSopenharmony_ci 10836881f68fSopenharmony_ci/** 10846881f68fSopenharmony_ci * struct fuse_supp_groups - Supplementary group extension 10856881f68fSopenharmony_ci * @nr_groups: number of supplementary groups 10866881f68fSopenharmony_ci * @groups: flexible array of group IDs 10876881f68fSopenharmony_ci */ 10886881f68fSopenharmony_cistruct fuse_supp_groups { 10896881f68fSopenharmony_ci uint32_t nr_groups; 10906881f68fSopenharmony_ci uint32_t groups[]; 10916881f68fSopenharmony_ci}; 10926881f68fSopenharmony_ci 10936881f68fSopenharmony_ci#endif /* _LINUX_FUSE_H */ 1094