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