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