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 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_suspendctl(struct mount *, int); 50 51 int genfs_can_access(enum vtype, mode_t, uid_t, gid_t, mode_t, 52 kauth_cred_t); 53 int genfs_can_chmod(enum vtype, kauth_cred_t, uid_t, gid_t, mode_t); 54 int genfs_can_chown(kauth_cred_t, uid_t, gid_t, uid_t, gid_t); 55 int genfs_can_chtimes(vnode_t *, u_int, uid_t, kauth_cred_t); 56 int genfs_can_chflags(kauth_cred_t, enum vtype, uid_t, bool); 57 int genfs_can_sticky(kauth_cred_t, uid_t, uid_t); 58 int genfs_can_extattr(kauth_cred_t, int, vnode_t *, const char *); 59 60 /* 61 * Rename is complicated. Sorry. 62 */ 63 64 struct genfs_rename_ops; 65 66 67 int genfs_insane_rename(void *, 68 int (*)(struct vnode *, struct componentname *, 69 struct vnode *, struct componentname *, 70 kauth_cred_t, bool)); 71 int 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 76 void genfs_rename_knote(struct vnode *, struct vnode *, struct vnode *, 77 struct vnode *, bool); 78 void genfs_rename_cache_purge(struct vnode *, struct vnode *, struct vnode *, 79 struct vnode *); 80 81 int genfs_ufslike_rename_check_possible(unsigned long, unsigned long, 82 unsigned long, unsigned long, bool, 83 unsigned long, unsigned long); 84 int 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); 89 int genfs_ufslike_remove_check_possible(unsigned long, unsigned long, 90 unsigned long, unsigned long); 91 int genfs_ufslike_remove_check_permitted(kauth_cred_t, 92 struct vnode *, mode_t, uid_t, 93 struct vnode *, uid_t); 94 95 struct 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