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