/* $NetBSD: genfs.h,v 1.39 2022/03/27 17:10:55 christos Exp $ */ #ifndef _MISCFS_GENFS_GENFS_H_ #define _MISCFS_GENFS_GENFS_H_ #include #include struct componentname; struct mount; struct acl; int genfs_access(void *); int genfs_accessx(void *); int genfs_badop(void *); int genfs_nullop(void *); int genfs_enoioctl(void *); int genfs_enoextops(void *); int genfs_einval(void *); int genfs_eopnotsupp(void *); int genfs_erofs_link(void *); #define genfs_erofs_symlink genfs_erofs_link int genfs_ebadf(void *); int genfs_nolock(void *); int genfs_noislocked(void *); int genfs_nounlock(void *); int genfs_deadlock(void *); #define genfs_deadislocked genfs_islocked int genfs_deadunlock(void *); int genfs_parsepath(void *); int genfs_poll(void *); int genfs_kqfilter(void *); int genfs_fcntl(void *); int genfs_seek(void *); int genfs_abortop(void *); int genfs_revoke(void *); int genfs_lock(void *); int genfs_islocked(void *); int genfs_unlock(void *); int genfs_mmap(void *); int genfs_getpages(void *); int genfs_putpages(void *); int genfs_null_putpages(void *); int genfs_compat_getpages(void *); int genfs_pathconf(void *v); int genfs_do_putpages(struct vnode *, off_t, off_t, int, struct vm_page **); int genfs_statvfs(struct mount *, struct statvfs *); int genfs_renamelock_enter(struct mount *); void genfs_renamelock_exit(struct mount *); int genfs_suspendctl(struct mount *, int); int genfs_can_access(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t, struct acl *, accmode_t); int genfs_can_access_acl_posix1e(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t, struct acl *, accmode_t); int genfs_can_access_acl_nfs4(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t, struct acl *, accmode_t); int genfs_can_chmod(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t); int genfs_can_chown(struct vnode *, kauth_cred_t, uid_t, gid_t, uid_t, gid_t); int genfs_can_chtimes(struct vnode *, kauth_cred_t, uid_t, u_int); int genfs_can_chflags(struct vnode *, kauth_cred_t, uid_t, bool); int genfs_can_sticky(struct vnode *, kauth_cred_t, uid_t, uid_t); int genfs_can_extattr(struct vnode *, kauth_cred_t, accmode_t, int); /* * Rename is complicated. Sorry. */ struct genfs_rename_ops; int genfs_insane_rename(void *, int (*)(struct vnode *, struct componentname *, struct vnode *, struct componentname *, kauth_cred_t, bool)); int genfs_sane_rename(const struct genfs_rename_ops *, struct vnode *, struct componentname *, void *, struct vnode *, struct componentname *, void *, kauth_cred_t, bool); void genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *, struct vnode *, nlink_t); void genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *, struct vnode *); int genfs_ufslike_rename_check_possible(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned long); int genfs_ufslike_rename_check_permitted(kauth_cred_t, struct vnode *, mode_t, uid_t, struct vnode *, uid_t, struct vnode *, mode_t, uid_t, struct vnode *, uid_t); int genfs_ufslike_remove_check_possible(unsigned long, unsigned long, unsigned long, unsigned long); int genfs_ufslike_remove_check_permitted(kauth_cred_t, struct vnode *, mode_t, uid_t, struct vnode *, uid_t); struct genfs_rename_ops { bool (*gro_directory_empty_p)(struct mount *mp, kauth_cred_t cred, struct vnode *vp, struct vnode *dvp); int (*gro_rename_check_possible)(struct mount *mp, struct vnode *fdvp, struct vnode *fvp, struct vnode *tdvp, struct vnode *tvp); int (*gro_rename_check_permitted)(struct mount *mp, kauth_cred_t cred, struct vnode *fdvp, struct vnode *fvp, struct vnode *tdvp, struct vnode *tvp); int (*gro_remove_check_possible)(struct mount *mp, struct vnode *dvp, struct vnode *vp); int (*gro_remove_check_permitted)(struct mount *mp, kauth_cred_t cred, struct vnode *dvp, struct vnode *vp); int (*gro_rename)(struct mount *mp, kauth_cred_t cred, struct vnode *fdvp, struct componentname *fcnp, void *fde, struct vnode *fvp, struct vnode *tdvp, struct componentname *tcnp, void *tde, struct vnode *tvp, nlink_t *tvp_nlinkp); int (*gro_remove)(struct mount *mp, kauth_cred_t cred, struct vnode *dvp, struct componentname *cnp, void *de, struct vnode *vp, nlink_t *tvp_nlinkp); int (*gro_lookup)(struct mount *mp, struct vnode *dvp, struct componentname *cnp, void *de_ret, struct vnode **vp_ret); int (*gro_genealogy)(struct mount *mp, kauth_cred_t cred, struct vnode *fdvp, struct vnode *tdvp, struct vnode **intermediate_node_ret); int (*gro_lock_directory)(struct mount *mp, struct vnode *vp); }; #endif /* !_MISCFS_GENFS_GENFS_H_ */