1 | /* $NetBSD: genfs.h,v 1.32 2014/02/27 16:51:38 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_can_access(enum vtype, mode_t, uid_t, gid_t, mode_t, |
50 | kauth_cred_t); |
51 | int genfs_can_chmod(enum vtype, kauth_cred_t, uid_t, gid_t, mode_t); |
52 | int genfs_can_chown(kauth_cred_t, uid_t, gid_t, uid_t, gid_t); |
53 | int genfs_can_chtimes(vnode_t *, u_int, uid_t, kauth_cred_t); |
54 | int genfs_can_chflags(kauth_cred_t, enum vtype, uid_t, bool); |
55 | int genfs_can_sticky(kauth_cred_t, uid_t, uid_t); |
56 | int genfs_can_extattr(kauth_cred_t, int, vnode_t *, const char *); |
57 | |
58 | /* |
59 | * Rename is complicated. Sorry. |
60 | */ |
61 | |
62 | struct genfs_rename_ops; |
63 | |
64 | |
65 | int genfs_insane_rename(void *, |
66 | int (*)(struct vnode *, struct componentname *, |
67 | struct vnode *, struct componentname *, |
68 | kauth_cred_t, bool)); |
69 | int genfs_sane_rename(const struct genfs_rename_ops *, |
70 | struct vnode *, struct componentname *, void *, |
71 | struct vnode *, struct componentname *, void *, |
72 | kauth_cred_t, bool); |
73 | |
74 | void genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *, |
75 | struct vnode *, bool); |
76 | void genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *, |
77 | struct vnode *); |
78 | |
79 | int genfs_ufslike_rename_check_possible(unsigned long, unsigned long, |
80 | unsigned long, unsigned long, bool, |
81 | unsigned long, unsigned long); |
82 | int genfs_ufslike_rename_check_permitted(kauth_cred_t, |
83 | struct vnode *, mode_t, uid_t, |
84 | struct vnode *, uid_t, |
85 | struct vnode *, mode_t, uid_t, |
86 | struct vnode *, uid_t); |
87 | int genfs_ufslike_remove_check_possible(unsigned long, unsigned long, |
88 | unsigned long, unsigned long); |
89 | int genfs_ufslike_remove_check_permitted(kauth_cred_t, |
90 | struct vnode *, mode_t, uid_t, |
91 | struct vnode *, uid_t); |
92 | |
93 | struct genfs_rename_ops { |
94 | bool (*gro_directory_empty_p)(struct mount *mp, kauth_cred_t cred, |
95 | struct vnode *vp, struct vnode *dvp); |
96 | int (*gro_rename_check_possible)(struct mount *mp, |
97 | struct vnode *fdvp, struct vnode *fvp, |
98 | struct vnode *tdvp, struct vnode *tvp); |
99 | int (*gro_rename_check_permitted)(struct mount *mp, kauth_cred_t cred, |
100 | struct vnode *fdvp, struct vnode *fvp, |
101 | struct vnode *tdvp, struct vnode *tvp); |
102 | int (*gro_remove_check_possible)(struct mount *mp, |
103 | struct vnode *dvp, struct vnode *vp); |
104 | int (*gro_remove_check_permitted)(struct mount *mp, kauth_cred_t cred, |
105 | struct vnode *dvp, struct vnode *vp); |
106 | int (*gro_rename)(struct mount *mp, kauth_cred_t cred, |
107 | struct vnode *fdvp, struct componentname *fcnp, |
108 | void *fde, struct vnode *fvp, |
109 | struct vnode *tdvp, struct componentname *tcnp, |
110 | void *tde, struct vnode *tvp); |
111 | int (*gro_remove)(struct mount *mp, kauth_cred_t cred, |
112 | struct vnode *dvp, struct componentname *cnp, void *de, |
113 | struct vnode *vp); |
114 | int (*gro_lookup)(struct mount *mp, struct vnode *dvp, |
115 | struct componentname *cnp, void *de_ret, struct vnode **vp_ret); |
116 | int (*gro_genealogy)(struct mount *mp, kauth_cred_t cred, |
117 | struct vnode *fdvp, struct vnode *tdvp, |
118 | struct vnode **intermediate_node_ret); |
119 | int (*gro_lock_directory)(struct mount *mp, struct vnode *vp); |
120 | }; |
121 | |
122 | #endif /* !_MISCFS_GENFS_GENFS_H_ */ |
123 | |