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