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
9struct componentname;
10struct mount;
11
12int genfs_badop(void *);
13int genfs_nullop(void *);
14int genfs_enoioctl(void *);
15int genfs_enoextops(void *);
16int genfs_einval(void *);
17int genfs_eopnotsupp(void *);
18int genfs_ebadf(void *);
19int genfs_nolock(void *);
20int genfs_noislocked(void *);
21int genfs_nounlock(void *);
22
23int genfs_deadlock(void *);
24#define genfs_deadislocked genfs_islocked
25int genfs_deadunlock(void *);
26
27int genfs_poll(void *);
28int genfs_kqfilter(void *);
29int genfs_fcntl(void *);
30int genfs_seek(void *);
31int genfs_abortop(void *);
32int genfs_revoke(void *);
33int genfs_lock(void *);
34int genfs_islocked(void *);
35int genfs_unlock(void *);
36int genfs_mmap(void *);
37int genfs_getpages(void *);
38int genfs_putpages(void *);
39int genfs_null_putpages(void *);
40int genfs_compat_getpages(void *);
41
42int genfs_do_putpages(struct vnode *, off_t, off_t, int, struct vm_page **);
43
44int genfs_statvfs(struct mount *, struct statvfs *);
45
46int genfs_renamelock_enter(struct mount *);
47void genfs_renamelock_exit(struct mount *);
48
49int genfs_suspendctl(struct mount *, int);
50
51int genfs_can_access(enum vtype, mode_t, uid_t, gid_t, mode_t,
52 kauth_cred_t);
53int genfs_can_chmod(enum vtype, kauth_cred_t, uid_t, gid_t, mode_t);
54int genfs_can_chown(kauth_cred_t, uid_t, gid_t, uid_t, gid_t);
55int genfs_can_chtimes(vnode_t *, u_int, uid_t, kauth_cred_t);
56int genfs_can_chflags(kauth_cred_t, enum vtype, uid_t, bool);
57int genfs_can_sticky(kauth_cred_t, uid_t, uid_t);
58int genfs_can_extattr(kauth_cred_t, int, vnode_t *, const char *);
59
60/*
61 * Rename is complicated. Sorry.
62 */
63
64struct genfs_rename_ops;
65
66
67int genfs_insane_rename(void *,
68 int (*)(struct vnode *, struct componentname *,
69 struct vnode *, struct componentname *,
70 kauth_cred_t, bool));
71int 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
76void genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *,
77 struct vnode *, bool);
78void genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *,
79 struct vnode *);
80
81int genfs_ufslike_rename_check_possible(unsigned long, unsigned long,
82 unsigned long, unsigned long, bool,
83 unsigned long, unsigned long);
84int 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);
89int genfs_ufslike_remove_check_possible(unsigned long, unsigned long,
90 unsigned long, unsigned long);
91int genfs_ufslike_remove_check_permitted(kauth_cred_t,
92 struct vnode *, mode_t, uid_t,
93 struct vnode *, uid_t);
94
95struct 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