| 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 | |