xref: /linux/fs/fuse/args.h (revision 1b78070aaef63512688aebfbc82365ef9d6660f1)
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