xref: /linux/fs/fuse/dev.h (revision b6d83d4e3eff4532c4c93d958dec78099ea37f5a)
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;
14*b6d83d4eSMiklos 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);
20*b6d83d4eSMiklos Szeredi unsigned int fuse_chan_num_background(struct fuse_chan *fch);
21*b6d83d4eSMiklos Szeredi unsigned int fuse_chan_max_background(struct fuse_chan *fch);
22*b6d83d4eSMiklos Szeredi void fuse_chan_max_background_set(struct fuse_chan *fch, unsigned int val);
23*b6d83d4eSMiklos Szeredi unsigned int fuse_chan_num_waiting(struct fuse_chan *fch);
24*b6d83d4eSMiklos Szeredi void fuse_chan_set_fc(struct fuse_chan *fch, struct fuse_conn *fc);
25*b6d83d4eSMiklos Szeredi void fuse_chan_set_initialized(struct fuse_chan *fch);
26*b6d83d4eSMiklos Szeredi void fuse_chan_io_uring_enable(struct fuse_chan *fch);
27*b6d83d4eSMiklos Szeredi 
28a73a7883SMiklos Szeredi DEFINE_FREE(fuse_chan_free, struct fuse_chan *, if (_T) fuse_chan_free(_T))
29f1434857SMiklos Szeredi 
30d8189630SMiklos Szeredi void fuse_dev_install(struct fuse_dev *fud, struct fuse_conn *fc);
31*b6d83d4eSMiklos Szeredi bool fuse_dev_verify(struct fuse_dev *fud, struct fuse_conn *fc);
32d8189630SMiklos Szeredi void fuse_dev_put(struct fuse_dev *fud);
33*b6d83d4eSMiklos Szeredi bool fuse_dev_is_installed(struct fuse_dev *fud);
34*b6d83d4eSMiklos Szeredi bool fuse_dev_is_sync_init(struct fuse_dev *fud);
35*b6d83d4eSMiklos Szeredi struct fuse_dev *fuse_dev_grab(struct file *file);
36d8189630SMiklos Szeredi 
3756b4332eSMiklos Szeredi void fuse_init_server_timeout(struct fuse_chan *fch, unsigned int timeout);
38f1434857SMiklos Szeredi 
39*b6d83d4eSMiklos Szeredi #ifdef CONFIG_FUSE_IO_URING
40*b6d83d4eSMiklos Szeredi bool fuse_uring_enabled(void);
41*b6d83d4eSMiklos Szeredi void fuse_uring_destruct(struct fuse_chan *fch);
42*b6d83d4eSMiklos Szeredi #else /* CONFIG_FUSE_IO_URING */
43*b6d83d4eSMiklos Szeredi static inline bool fuse_uring_enabled(void)
44*b6d83d4eSMiklos Szeredi {
45*b6d83d4eSMiklos Szeredi 	return false;
46*b6d83d4eSMiklos Szeredi }
47*b6d83d4eSMiklos Szeredi 
48*b6d83d4eSMiklos Szeredi static inline void fuse_uring_destruct(struct fuse_chan *fch)
49*b6d83d4eSMiklos Szeredi {
50*b6d83d4eSMiklos Szeredi }
51*b6d83d4eSMiklos Szeredi #endif /* CONFIG_FUSE_IO_URING */
52*b6d83d4eSMiklos Szeredi 
53f1434857SMiklos Szeredi #endif /* _FS_FUSE_DEV_H */
54