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_ */ 137