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