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