genfs.h revision 1.37 1 /* $NetBSD: genfs.h,v 1.37 2021/06/29 22:34:08 dholland 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_ebadf(void *);
22 int genfs_nolock(void *);
23 int genfs_noislocked(void *);
24 int genfs_nounlock(void *);
25
26 int genfs_deadlock(void *);
27 #define genfs_deadislocked genfs_islocked
28 int genfs_deadunlock(void *);
29
30 int genfs_parsepath(void *);
31 int genfs_poll(void *);
32 int genfs_kqfilter(void *);
33 int genfs_fcntl(void *);
34 int genfs_seek(void *);
35 int genfs_abortop(void *);
36 int genfs_revoke(void *);
37 int genfs_lock(void *);
38 int genfs_islocked(void *);
39 int genfs_unlock(void *);
40 int genfs_mmap(void *);
41 int genfs_getpages(void *);
42 int genfs_putpages(void *);
43 int genfs_null_putpages(void *);
44 int genfs_compat_getpages(void *);
45 int genfs_pathconf(void *v);
46
47 int genfs_do_putpages(struct vnode *, off_t, off_t, int, struct vm_page **);
48
49 int genfs_statvfs(struct mount *, struct statvfs *);
50
51 int genfs_renamelock_enter(struct mount *);
52 void genfs_renamelock_exit(struct mount *);
53
54 int genfs_suspendctl(struct mount *, int);
55
56 int genfs_can_access(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t,
57 struct acl *, accmode_t);
58 int genfs_can_access_acl_posix1e(struct vnode *, kauth_cred_t, uid_t,
59 gid_t, mode_t, struct acl *, accmode_t);
60 int genfs_can_access_acl_nfs4(struct vnode *, kauth_cred_t, uid_t, gid_t,
61 mode_t, struct acl *, accmode_t);
62 int genfs_can_chmod(struct vnode *, kauth_cred_t, uid_t, gid_t, mode_t);
63 int genfs_can_chown(struct vnode *, kauth_cred_t, uid_t, gid_t, uid_t,
64 gid_t);
65 int genfs_can_chtimes(struct vnode *, kauth_cred_t, uid_t, u_int);
66 int genfs_can_chflags(struct vnode *, kauth_cred_t, uid_t, bool);
67 int genfs_can_sticky(struct vnode *, kauth_cred_t, uid_t, uid_t);
68 int genfs_can_extattr(struct vnode *, kauth_cred_t, accmode_t, int);
69
70 /*
71 * Rename is complicated. Sorry.
72 */
73
74 struct genfs_rename_ops;
75
76
77 int genfs_insane_rename(void *,
78 int (*)(struct vnode *, struct componentname *,
79 struct vnode *, struct componentname *,
80 kauth_cred_t, bool));
81 int genfs_sane_rename(const struct genfs_rename_ops *,
82 struct vnode *, struct componentname *, void *,
83 struct vnode *, struct componentname *, void *,
84 kauth_cred_t, bool);
85
86 void genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *,
87 struct vnode *, bool);
88 void genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *,
89 struct vnode *);
90
91 int genfs_ufslike_rename_check_possible(unsigned long, unsigned long,
92 unsigned long, unsigned long, bool,
93 unsigned long, unsigned long);
94 int genfs_ufslike_rename_check_permitted(kauth_cred_t,
95 struct vnode *, mode_t, uid_t,
96 struct vnode *, uid_t,
97 struct vnode *, mode_t, uid_t,
98 struct vnode *, uid_t);
99 int genfs_ufslike_remove_check_possible(unsigned long, unsigned long,
100 unsigned long, unsigned long);
101 int genfs_ufslike_remove_check_permitted(kauth_cred_t,
102 struct vnode *, mode_t, uid_t,
103 struct vnode *, uid_t);
104
105 struct genfs_rename_ops {
106 bool (*gro_directory_empty_p)(struct mount *mp, kauth_cred_t cred,
107 struct vnode *vp, struct vnode *dvp);
108 int (*gro_rename_check_possible)(struct mount *mp,
109 struct vnode *fdvp, struct vnode *fvp,
110 struct vnode *tdvp, struct vnode *tvp);
111 int (*gro_rename_check_permitted)(struct mount *mp, kauth_cred_t cred,
112 struct vnode *fdvp, struct vnode *fvp,
113 struct vnode *tdvp, struct vnode *tvp);
114 int (*gro_remove_check_possible)(struct mount *mp,
115 struct vnode *dvp, struct vnode *vp);
116 int (*gro_remove_check_permitted)(struct mount *mp, kauth_cred_t cred,
117 struct vnode *dvp, struct vnode *vp);
118 int (*gro_rename)(struct mount *mp, kauth_cred_t cred,
119 struct vnode *fdvp, struct componentname *fcnp,
120 void *fde, struct vnode *fvp,
121 struct vnode *tdvp, struct componentname *tcnp,
122 void *tde, struct vnode *tvp);
123 int (*gro_remove)(struct mount *mp, kauth_cred_t cred,
124 struct vnode *dvp, struct componentname *cnp, void *de,
125 struct vnode *vp);
126 int (*gro_lookup)(struct mount *mp, struct vnode *dvp,
127 struct componentname *cnp, void *de_ret, struct vnode **vp_ret);
128 int (*gro_genealogy)(struct mount *mp, kauth_cred_t cred,
129 struct vnode *fdvp, struct vnode *tdvp,
130 struct vnode **intermediate_node_ret);
131 int (*gro_lock_directory)(struct mount *mp, struct vnode *vp);
132 };
133
134 #endif /* !_MISCFS_GENFS_GENFS_H_ */
135