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
  9struct componentname;
 10struct mount;
 11struct acl;
 12
 13int	genfs_access(void *);
 14int	genfs_accessx(void *);
 15int	genfs_badop(void *);
 16int	genfs_nullop(void *);
 17int	genfs_enoioctl(void *);
 18int	genfs_enoextops(void *);
 19int	genfs_einval(void *);
 20int	genfs_eopnotsupp(void *);
 21int	genfs_erofs_link(void *);
 22#define	genfs_erofs_symlink genfs_erofs_link
 23int	genfs_ebadf(void *);
 24int	genfs_nolock(void *);
 25int	genfs_noislocked(void *);
 26int	genfs_nounlock(void *);
 27
 28int	genfs_deadlock(void *);
 29#define	genfs_deadislocked genfs_islocked
 30int	genfs_deadunlock(void *);
 31
 32int	genfs_parsepath(void *);
 33int	genfs_poll(void *);
 34int	genfs_kqfilter(void *);
 35int	genfs_fcntl(void *);
 36int	genfs_seek(void *);
 37int	genfs_abortop(void *);
 38int	genfs_revoke(void *);
 39int	genfs_lock(void *);
 40int	genfs_islocked(void *);
 41int	genfs_unlock(void *);
 42int	genfs_mmap(void *);
 43int	genfs_getpages(void *);
 44int	genfs_putpages(void *);
 45int	genfs_null_putpages(void *);
 46int	genfs_compat_getpages(void *);
 47int	genfs_pathconf(void *v);
 48
 49int	genfs_do_putpages(struct vnode *, off_t, off_t, int, struct vm_page **);
 50
 51int	genfs_statvfs(struct mount *, struct statvfs *);
 52
 53int	genfs_renamelock_enter(struct mount *);
 54void	genfs_renamelock_exit(struct mount *);
 55
 56int	genfs_suspendctl(struct mount *, int);
 57
 58int	genfs_can_access(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t,
 59    struct acl *, accmode_t);
 60int	genfs_can_access_acl_posix1e(struct vnode *, kauth_cred_t, uid_t,
 61    gid_t, mode_t, struct acl *, accmode_t);
 62int	genfs_can_access_acl_nfs4(struct vnode *, kauth_cred_t, uid_t, gid_t,
 63    mode_t, struct acl *, accmode_t);
 64int	genfs_can_chmod(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t);
 65int	genfs_can_chown(struct vnode *, kauth_cred_t, uid_t, gid_t, uid_t,
 66    gid_t);
 67int	genfs_can_chtimes(struct vnode *, kauth_cred_t, uid_t, u_int);
 68int	genfs_can_chflags(struct vnode *, kauth_cred_t, uid_t, bool);
 69int	genfs_can_sticky(struct vnode *, kauth_cred_t, uid_t, uid_t);
 70int	genfs_can_extattr(struct vnode *, kauth_cred_t, accmode_t, int);
 71
 72/*
 73 * Rename is complicated.  Sorry.
 74 */
 75
 76struct genfs_rename_ops;
 77
 78
 79int	genfs_insane_rename(void *,
 80	    int (*)(struct vnode *, struct componentname *,
 81		struct vnode *, struct componentname *,
 82		kauth_cred_t, bool));
 83int	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
 88void	genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *,
 89	    struct vnode *, nlink_t);
 90void	genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *,
 91	    struct vnode *);
 92
 93int	genfs_ufslike_rename_check_possible(unsigned long, unsigned long,
 94	    unsigned long, unsigned long, bool,
 95	    unsigned long, unsigned long);
 96int	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);
101int	genfs_ufslike_remove_check_possible(unsigned long, unsigned long,
102	    unsigned long, unsigned long);
103int	genfs_ufslike_remove_check_permitted(kauth_cred_t,
104	    struct vnode *, mode_t, uid_t,
105	    struct vnode *, uid_t);
106
107struct 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_ */