xref: /linux/fs/fuse/dev.h (revision 4f5f0038d69102bd112240a36bf807b4408a11ab)
1f1434857SMiklos Szeredi /* SPDX-License-Identifier: GPL-2.0 */
2f1434857SMiklos Szeredi 
3f1434857SMiklos Szeredi #ifndef _FS_FUSE_DEV_H
4f1434857SMiklos Szeredi #define _FS_FUSE_DEV_H
5f1434857SMiklos Szeredi 
6a73a7883SMiklos Szeredi #include <linux/cleanup.h>
7a73a7883SMiklos Szeredi 
82b07cbc4SMiklos Szeredi /** Maximum number of outstanding background requests */
92b07cbc4SMiklos Szeredi #define FUSE_DEFAULT_MAX_BACKGROUND 12
102b07cbc4SMiklos Szeredi 
11f1434857SMiklos Szeredi struct fuse_conn;
12a73a7883SMiklos Szeredi struct fuse_chan;
13d8189630SMiklos Szeredi struct fuse_dev;
14b6d83d4eSMiklos Szeredi struct file;
15a73a7883SMiklos Szeredi 
16a73a7883SMiklos Szeredi struct fuse_chan *fuse_chan_new(void);
17b88fb2b9SMiklos Szeredi struct fuse_chan *fuse_dev_chan_new(void);
18b88fb2b9SMiklos Szeredi void fuse_chan_release(struct fuse_chan *fch);
19a73a7883SMiklos Szeredi void fuse_chan_free(struct fuse_chan *fch);
20b6d83d4eSMiklos Szeredi unsigned int fuse_chan_num_background(struct fuse_chan *fch);
21b6d83d4eSMiklos Szeredi unsigned int fuse_chan_max_background(struct fuse_chan *fch);
22b6d83d4eSMiklos Szeredi void fuse_chan_max_background_set(struct fuse_chan *fch, unsigned int val);
23b6d83d4eSMiklos Szeredi unsigned int fuse_chan_num_waiting(struct fuse_chan *fch);
24b6d83d4eSMiklos Szeredi void fuse_chan_set_fc(struct fuse_chan *fch, struct fuse_conn *fc);
25b6d83d4eSMiklos Szeredi void fuse_chan_set_initialized(struct fuse_chan *fch);
26b6d83d4eSMiklos Szeredi void fuse_chan_io_uring_enable(struct fuse_chan *fch);
27b6d83d4eSMiklos Szeredi 
28*4f5f0038SMiklos Szeredi struct fuse_forget_link *fuse_alloc_forget(void);
29*4f5f0038SMiklos Szeredi void fuse_chan_queue_forget(struct fuse_chan *fch, struct fuse_forget_link *forget,
30*4f5f0038SMiklos Szeredi 			    u64 nodeid, u64 nlookup);
31*4f5f0038SMiklos Szeredi 
32*4f5f0038SMiklos Szeredi 
33a73a7883SMiklos Szeredi DEFINE_FREE(fuse_chan_free, struct fuse_chan *, if (_T) fuse_chan_free(_T))
34f1434857SMiklos Szeredi 
35d8189630SMiklos Szeredi void fuse_dev_install(struct fuse_dev *fud, struct fuse_conn *fc);
36b6d83d4eSMiklos Szeredi bool fuse_dev_verify(struct fuse_dev *fud, struct fuse_conn *fc);
37d8189630SMiklos Szeredi void fuse_dev_put(struct fuse_dev *fud);
38b6d83d4eSMiklos Szeredi bool fuse_dev_is_installed(struct fuse_dev *fud);
39b6d83d4eSMiklos Szeredi bool fuse_dev_is_sync_init(struct fuse_dev *fud);
40b6d83d4eSMiklos Szeredi struct fuse_dev *fuse_dev_grab(struct file *file);
41d8189630SMiklos Szeredi 
4256b4332eSMiklos Szeredi void fuse_init_server_timeout(struct fuse_chan *fch, unsigned int timeout);
43f1434857SMiklos Szeredi 
44b6d83d4eSMiklos Szeredi #ifdef CONFIG_FUSE_IO_URING
45b6d83d4eSMiklos Szeredi bool fuse_uring_enabled(void);
46b6d83d4eSMiklos Szeredi void fuse_uring_destruct(struct fuse_chan *fch);
47b6d83d4eSMiklos Szeredi #else /* CONFIG_FUSE_IO_URING */
48b6d83d4eSMiklos Szeredi static inline bool fuse_uring_enabled(void)
49b6d83d4eSMiklos Szeredi {
50b6d83d4eSMiklos Szeredi 	return false;
51b6d83d4eSMiklos Szeredi }
52b6d83d4eSMiklos Szeredi 
53b6d83d4eSMiklos Szeredi static inline void fuse_uring_destruct(struct fuse_chan *fch)
54b6d83d4eSMiklos Szeredi {
55b6d83d4eSMiklos Szeredi }
56b6d83d4eSMiklos Szeredi #endif /* CONFIG_FUSE_IO_URING */
57b6d83d4eSMiklos Szeredi 
58f1434857SMiklos Szeredi #endif /* _FS_FUSE_DEV_H */
59