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