| 1 | /*	$NetBSD: genfs.h,v 1.39 2022/03/27 17:10:55 christos Exp $	*/ |
| 2 | |
| 3 | #ifndef	_MISCFS_GENFS_GENFS_H_ |
| 4 | #define	_MISCFS_GENFS_GENFS_H_ |
| 5 | |
| 6 | #include <sys/vnode.h> |
| 7 | #include <sys/types.h> |
| 8 | |
| 9 | struct componentname; |
| 10 | struct mount; |
| 11 | struct acl; |
| 12 | |
| 13 | int	genfs_access(void *); |
| 14 | int	genfs_accessx(void *); |
| 15 | int	genfs_badop(void *); |
| 16 | int	genfs_nullop(void *); |
| 17 | int	genfs_enoioctl(void *); |
| 18 | int	genfs_enoextops(void *); |
| 19 | int	genfs_einval(void *); |
| 20 | int	genfs_eopnotsupp(void *); |
| 21 | int	genfs_erofs_link(void *); |
| 22 | #define	genfs_erofs_symlink genfs_erofs_link |
| 23 | int	genfs_ebadf(void *); |
| 24 | int	genfs_nolock(void *); |
| 25 | int	genfs_noislocked(void *); |
| 26 | int	genfs_nounlock(void *); |
| 27 | |
| 28 | int	genfs_deadlock(void *); |
| 29 | #define	genfs_deadislocked genfs_islocked |
| 30 | int	genfs_deadunlock(void *); |
| 31 | |
| 32 | int	genfs_parsepath(void *); |
| 33 | int	genfs_poll(void *); |
| 34 | int	genfs_kqfilter(void *); |
| 35 | int	genfs_fcntl(void *); |
| 36 | int	genfs_seek(void *); |
| 37 | int	genfs_abortop(void *); |
| 38 | int	genfs_revoke(void *); |
| 39 | int	genfs_lock(void *); |
| 40 | int	genfs_islocked(void *); |
| 41 | int	genfs_unlock(void *); |
| 42 | int	genfs_mmap(void *); |
| 43 | int	genfs_getpages(void *); |
| 44 | int	genfs_putpages(void *); |
| 45 | int	genfs_null_putpages(void *); |
| 46 | int	genfs_compat_getpages(void *); |
| 47 | int	genfs_pathconf(void *v); |
| 48 | |
| 49 | int	genfs_do_putpages(struct vnode *, off_t, off_t, int, struct vm_page **); |
| 50 | |
| 51 | int	genfs_statvfs(struct mount *, struct statvfs *); |
| 52 | |
| 53 | int	genfs_renamelock_enter(struct mount *); |
| 54 | void	genfs_renamelock_exit(struct mount *); |
| 55 | |
| 56 | int	genfs_suspendctl(struct mount *, int); |
| 57 | |
| 58 | int	genfs_can_access(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t, |
| 59 | struct acl *, accmode_t); |
| 60 | int	genfs_can_access_acl_posix1e(struct vnode *, kauth_cred_t, uid_t, |
| 61 | gid_t, mode_t, struct acl *, accmode_t); |
| 62 | int	genfs_can_access_acl_nfs4(struct vnode *, kauth_cred_t, uid_t, gid_t, |
| 63 | mode_t, struct acl *, accmode_t); |
| 64 | int	genfs_can_chmod(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t); |
| 65 | int	genfs_can_chown(struct vnode *, kauth_cred_t, uid_t, gid_t, uid_t, |
| 66 | gid_t); |
| 67 | int	genfs_can_chtimes(struct vnode *, kauth_cred_t, uid_t, u_int); |
| 68 | int	genfs_can_chflags(struct vnode *, kauth_cred_t, uid_t, bool); |
| 69 | int	genfs_can_sticky(struct vnode *, kauth_cred_t, uid_t, uid_t); |
| 70 | int	genfs_can_extattr(struct vnode *, kauth_cred_t, accmode_t, int); |
| 71 | |
| 72 | /* |
| 73 | * Rename is complicated. Sorry. |
| 74 | */ |
| 75 | |
| 76 | struct genfs_rename_ops; |
| 77 | |
| 78 | |
| 79 | int	genfs_insane_rename(void *, |
| 80 | 	 int (*)(struct vnode *, struct componentname *, |
| 81 | 		struct vnode *, struct componentname *, |
| 82 | 		kauth_cred_t, bool)); |
| 83 | int	genfs_sane_rename(const struct genfs_rename_ops *, |
| 84 | 	 struct vnode *, struct componentname *, void *, |
| 85 | 	 struct vnode *, struct componentname *, void *, |
| 86 | 	 kauth_cred_t, bool); |
| 87 | |
| 88 | void	genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *, |
| 89 | 	 struct vnode *, nlink_t); |
| 90 | void	genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *, |
| 91 | 	 struct vnode *); |
| 92 | |
| 93 | int	genfs_ufslike_rename_check_possible(unsigned long, unsigned long, |
| 94 | 	 unsigned long, unsigned long, bool, |
| 95 | 	 unsigned long, unsigned long); |
| 96 | int	genfs_ufslike_rename_check_permitted(kauth_cred_t, |
| 97 | 	 struct vnode *, mode_t, uid_t, |
| 98 | 	 struct vnode *, uid_t, |
| 99 | 	 struct vnode *, mode_t, uid_t, |
| 100 | 	 struct vnode *, uid_t); |
| 101 | int	genfs_ufslike_remove_check_possible(unsigned long, unsigned long, |
| 102 | 	 unsigned long, unsigned long); |
| 103 | int	genfs_ufslike_remove_check_permitted(kauth_cred_t, |
| 104 | 	 struct vnode *, mode_t, uid_t, |
| 105 | 	 struct vnode *, uid_t); |
| 106 | |
| 107 | struct genfs_rename_ops { |
| 108 | 	bool (*gro_directory_empty_p)(struct mount *mp, kauth_cred_t cred, |
| 109 | 	 struct vnode *vp, struct vnode *dvp); |
| 110 | 	int (*gro_rename_check_possible)(struct mount *mp, |
| 111 | 	 struct vnode *fdvp, struct vnode *fvp, |
| 112 | 	 struct vnode *tdvp, struct vnode *tvp); |
| 113 | 	int (*gro_rename_check_permitted)(struct mount *mp, kauth_cred_t cred, |
| 114 | 	 struct vnode *fdvp, struct vnode *fvp, |
| 115 | 	 struct vnode *tdvp, struct vnode *tvp); |
| 116 | 	int (*gro_remove_check_possible)(struct mount *mp, |
| 117 | 	 struct vnode *dvp, struct vnode *vp); |
| 118 | 	int (*gro_remove_check_permitted)(struct mount *mp, kauth_cred_t cred, |
| 119 | 	 struct vnode *dvp, struct vnode *vp); |
| 120 | 	int (*gro_rename)(struct mount *mp, kauth_cred_t cred, |
| 121 | 	 struct vnode *fdvp, struct componentname *fcnp, |
| 122 | 	 void *fde, struct vnode *fvp, |
| 123 | 	 struct vnode *tdvp, struct componentname *tcnp, |
| 124 | 	 void *tde, struct vnode *tvp, nlink_t *tvp_nlinkp); |
| 125 | 	int (*gro_remove)(struct mount *mp, kauth_cred_t cred, |
| 126 | 	 struct vnode *dvp, struct componentname *cnp, void *de, |
| 127 | 	 struct vnode *vp, nlink_t *tvp_nlinkp); |
| 128 | 	int (*gro_lookup)(struct mount *mp, struct vnode *dvp, |
| 129 | 	 struct componentname *cnp, void *de_ret, struct vnode **vp_ret); |
| 130 | 	int (*gro_genealogy)(struct mount *mp, kauth_cred_t cred, |
| 131 | 	 struct vnode *fdvp, struct vnode *tdvp, |
| 132 | 	 struct vnode **intermediate_node_ret); |
| 133 | 	int (*gro_lock_directory)(struct mount *mp, struct vnode *vp); |
| 134 | }; |
| 135 | |
| 136 | #endif /* !_MISCFS_GENFS_GENFS_H_ */ |