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