1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef _FS_FUSE_ARGS_H 4 #define _FS_FUSE_ARGS_H 5 6 #include <linux/types.h> 7 8 struct fuse_mount; 9 10 /** One input argument of a request */ 11 struct fuse_in_arg { 12 unsigned size; 13 const void *value; 14 }; 15 16 /** One output argument of a request */ 17 struct fuse_arg { 18 unsigned size; 19 void *value; 20 }; 21 22 struct fuse_args { 23 u64 nodeid; 24 u32 opcode; 25 u32 uid; 26 u32 gid; 27 u32 pid; 28 u8 in_numargs; 29 u8 out_numargs; 30 u8 ext_idx; 31 bool force:1; 32 bool noreply:1; 33 bool nocreds:1; 34 bool in_pages:1; 35 bool out_pages:1; 36 bool user_pages:1; 37 bool out_argvar:1; 38 bool page_zeroing:1; 39 bool page_replace:1; 40 bool may_block:1; 41 bool is_ext:1; 42 bool is_pinned:1; 43 bool invalidate_vmap:1; 44 bool abort_on_kill:1; 45 /* server requested io-uring zero-copy for this op */ 46 bool zero_copy:1; 47 struct fuse_in_arg in_args[4]; 48 struct fuse_arg out_args[2]; 49 void (*end)(struct fuse_args *args, int error); 50 /* Used for kvec iter backed by vmalloc address */ 51 void *vmap_base; 52 }; 53 54 /** FUSE folio descriptor */ 55 struct fuse_folio_desc { 56 unsigned int length; 57 unsigned int offset; 58 }; 59 60 struct fuse_args_pages { 61 struct fuse_args args; 62 struct folio **folios; 63 struct fuse_folio_desc *descs; 64 unsigned int num_folios; 65 }; 66 67 #endif /* _FS_FUSE_ARGS_H */ 68