projects/linux·blob master · refs

67 lines · 1.2 KiB

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
8struct fuse_mount;
9
10/** One input argument of a request */
11struct fuse_in_arg {
12 unsigned size;
13 const void *value;
14};
15
16/** One output argument of a request */
17struct fuse_arg {
18 unsigned size;
19 void *value;
20};
21
22struct 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 */
55struct fuse_folio_desc {
56 unsigned int length;
57 unsigned int offset;
58};
59
60struct 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 */