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