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