xref: /openbsd-src/sys/miscfs/fuse/fusefs_node.h (revision 51d8761d1e63aff7173adb7b282dbb4d6279257d)
1*51d8761dSclaudio /* $OpenBSD: fusefs_node.h,v 1.5 2024/10/31 13:55:21 claudio Exp $ */
2a2badd06Stedu /*
3a2badd06Stedu  * Copyright (c) 2012-2013 Sylvestre Gallon <ccna.syl@gmail.com>
4a2badd06Stedu  *
5a2badd06Stedu  * Permission to use, copy, modify, and distribute this software for any
6a2badd06Stedu  * purpose with or without fee is hereby granted, provided that the above
7a2badd06Stedu  * copyright notice and this permission notice appear in all copies.
8a2badd06Stedu  *
9a2badd06Stedu  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10a2badd06Stedu  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11a2badd06Stedu  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12a2badd06Stedu  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13a2badd06Stedu  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14a2badd06Stedu  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15a2badd06Stedu  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16a2badd06Stedu  */
17a2badd06Stedu 
18a2badd06Stedu #ifndef _FUSEFS_NODE_H_
19a2badd06Stedu #define _FUSEFS_NODE_H_
20a2badd06Stedu 
21*51d8761dSclaudio #include <sys/queue.h>
22a2badd06Stedu 
23a2badd06Stedu enum fufh_type {
24a2badd06Stedu 	FUFH_INVALID = -1,
25a2badd06Stedu 	FUFH_RDONLY  = 0,
26a2badd06Stedu 	FUFH_WRONLY  = 1,
27a2badd06Stedu 	FUFH_RDWR    = 2,
28a2badd06Stedu 	FUFH_MAXTYPE = 3,
29a2badd06Stedu };
30a2badd06Stedu 
31a2badd06Stedu struct fusefs_filehandle {
32a2badd06Stedu 	uint64_t fh_id;
33a2badd06Stedu 	enum fufh_type fh_type;
34a2badd06Stedu };
35a2badd06Stedu 
36*51d8761dSclaudio struct fusefs_mnt;
37a2badd06Stedu struct fusefs_node {
38*51d8761dSclaudio 	LIST_ENTRY(fusefs_node)	 i_hash; /* Hash chain */
39*51d8761dSclaudio 	struct	vnode		*i_vnode;/* Vnode associated with this inode. */
40*51d8761dSclaudio 	struct	fusefs_mnt	*i_ump;
41*51d8761dSclaudio 	dev_t			 i_dev;	 /* Device associated with the inode. */
42*51d8761dSclaudio 	ino_t			 i_number;	/* The identity of the inode. */
43*51d8761dSclaudio 	struct	lockf_state	*i_lockf;	/* Byte-level lock state. */
44*51d8761dSclaudio 	struct	rrwlock		 i_lock;	/* Inode lock */
45a2badd06Stedu 
46a2badd06Stedu 	/** I/O **/
47a2badd06Stedu 	struct     fusefs_filehandle fufh[FUFH_MAXTYPE];
48a2badd06Stedu 
49a2badd06Stedu 	/** meta **/
50a2badd06Stedu 	off_t			 filesize;
51a2badd06Stedu };
52a2badd06Stedu 
53a2badd06Stedu #ifdef ITOV
54a2badd06Stedu # undef ITOV
55a2badd06Stedu #endif
56*51d8761dSclaudio #define ITOV(ip) ((ip)->i_vnode)
57a2badd06Stedu 
58a2badd06Stedu #ifdef VTOI
59a2badd06Stedu # undef VTOI
60a2badd06Stedu #endif
61a2badd06Stedu #define VTOI(vp) ((struct fusefs_node *)(vp)->v_data)
62a2badd06Stedu 
63*51d8761dSclaudio void		 fuse_ihashinit(void);
64*51d8761dSclaudio struct vnode	*fuse_ihashget(dev_t, ino_t);
65*51d8761dSclaudio int		 fuse_ihashins(struct fusefs_node *);
66*51d8761dSclaudio void		 fuse_ihashrem(struct fusefs_node *);
67*51d8761dSclaudio 
68a2badd06Stedu uint64_t fusefs_fd_get(struct fusefs_node *, enum fufh_type);
69a2badd06Stedu 
70a2badd06Stedu #endif /* _FUSEFS_NODE_H_ */
71