1 /* $NetBSD: ulfs_extern.h,v 1.10 2013/07/28 01:22:55 dholland Exp $ */ 2 /* from NetBSD: ufs_extern.h,v 1.72 2012/05/09 00:21:18 riastradh Exp */ 3 4 /*- 5 * Copyright (c) 1991, 1993, 1994 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 * @(#)ufs_extern.h 8.10 (Berkeley) 5/14/95 33 */ 34 35 #ifndef _UFS_LFS_ULFS_EXTERN_H_ 36 #define _UFS_LFS_ULFS_EXTERN_H_ 37 38 #include <sys/mutex.h> 39 40 struct buf; 41 struct componentname; 42 struct disklabel; 43 struct dquot; 44 struct fid; 45 struct flock; 46 struct indir; 47 struct inode; 48 struct mbuf; 49 struct mount; 50 struct nameidata; 51 struct lfs_direct; 52 struct lwp; 53 struct ulfs_args; 54 struct ulfs_lookup_results; 55 struct ulfs_ufid; 56 struct ulfsmount; 57 struct uio; 58 struct vattr; 59 struct vnode; 60 61 extern pool_cache_t ulfs_direct_cache; /* memory pool for lfs_directs */ 62 63 __BEGIN_DECLS 64 #define ulfs_abortop genfs_abortop 65 int ulfs_access(void *); 66 int ulfs_advlock(void *); 67 int ulfs_bmap(void *); 68 int ulfs_close(void *); 69 int ulfs_create(void *); 70 int ulfs_getattr(void *); 71 int ulfs_inactive(void *); 72 #define ulfs_fcntl genfs_fcntl 73 #define ulfs_ioctl genfs_enoioctl 74 #define ulfs_islocked genfs_islocked 75 int ulfs_link(void *); 76 #define ulfs_lock genfs_lock 77 int ulfs_lookup(void *); 78 int ulfs_mkdir(void *); 79 int ulfs_mknod(void *); 80 #define ulfs_mmap genfs_mmap 81 #define ulfs_revoke genfs_revoke 82 int ulfs_open(void *); 83 int ulfs_pathconf(void *); 84 int ulfs_print(void *); 85 int ulfs_readdir(void *); 86 int ulfs_readlink(void *); 87 int ulfs_remove(void *); 88 int ulfs_rmdir(void *); 89 #define ulfs_seek genfs_seek 90 #define ulfs_poll genfs_poll 91 int ulfs_setattr(void *); 92 int ulfs_strategy(void *); 93 int ulfs_symlink(void *); 94 #define ulfs_unlock genfs_unlock 95 int ulfs_whiteout(void *); 96 int ulfsspec_close(void *); 97 int ulfsspec_read(void *); 98 int ulfsspec_write(void *); 99 100 int ulfsfifo_read(void *); 101 int ulfsfifo_write(void *); 102 int ulfsfifo_close(void *); 103 104 /* ulfs_bmap.c */ 105 typedef bool (*ulfs_issequential_callback_t)(const struct lfs *, 106 daddr_t, daddr_t); 107 int ulfs_bmaparray(struct vnode *, daddr_t, daddr_t *, struct indir *, 108 int *, int *, ulfs_issequential_callback_t); 109 int ulfs_getlbns(struct vnode *, daddr_t, struct indir *, int *); 110 111 /* ulfs_ihash.c */ 112 void ulfs_ihashinit(void); 113 void ulfs_ihashreinit(void); 114 void ulfs_ihashdone(void); 115 struct vnode *ulfs_ihashlookup(dev_t, ino_t); 116 struct vnode *ulfs_ihashget(dev_t, ino_t, int); 117 void ulfs_ihashins(struct inode *); 118 void ulfs_ihashrem(struct inode *); 119 120 /* ulfs_inode.c */ 121 int ulfs_reclaim(struct vnode *); 122 int ulfs_balloc_range(struct vnode *, off_t, off_t, kauth_cred_t, int); 123 124 /* ulfs_lookup.c */ 125 void ulfs_dirbad(struct inode *, doff_t, const char *); 126 int ulfs_dirbadentry(struct vnode *, struct lfs_direct *, int); 127 void ulfs_makedirentry(struct inode *, struct componentname *, 128 struct lfs_direct *); 129 int ulfs_direnter(struct vnode *, const struct ulfs_lookup_results *, 130 struct vnode *, struct lfs_direct *, 131 struct componentname *, struct buf *); 132 int ulfs_dirremove(struct vnode *, const struct ulfs_lookup_results *, 133 struct inode *, int, int); 134 int ulfs_dirrewrite(struct inode *, off_t, 135 struct inode *, ino_t, int, int, int); 136 int ulfs_dirempty(struct inode *, ino_t, kauth_cred_t); 137 int ulfs_checkpath(struct inode *, struct inode *, kauth_cred_t); 138 int ulfs_parentcheck(struct vnode *, struct vnode *, kauth_cred_t, 139 int *, struct vnode **); 140 int ulfs_blkatoff(struct vnode *, off_t, char **, struct buf **, bool); 141 142 /* ulfs_quota.c */ 143 /* 144 * Flags to lfs_chkdq() and lfs_chkiq() 145 */ 146 #define FORCE 0x01 /* force usage changes independent of limits */ 147 void ulfsquota_init(struct inode *); 148 void ulfsquota_free(struct inode *); 149 int lfs_chkdq(struct inode *, int64_t, kauth_cred_t, int); 150 int lfs_chkiq(struct inode *, int32_t, kauth_cred_t, int); 151 int lfsquota_handle_cmd(struct mount *, struct lwp *, 152 struct quotactl_args *); 153 154 int lfs_qsync(struct mount *); 155 156 /* ulfs_quota1.c */ 157 int lfsquota1_umount(struct mount *, int); 158 159 /* ulfs_quota2.c */ 160 int lfsquota2_umount(struct mount *, int); 161 int lfs_quota2_mount(struct mount *); 162 163 /* ulfs_vfsops.c */ 164 void ulfs_init(void); 165 void ulfs_reinit(void); 166 void ulfs_done(void); 167 int ulfs_start(struct mount *, int); 168 int ulfs_root(struct mount *, struct vnode **); 169 int ulfs_quotactl(struct mount *, struct quotactl_args *); 170 int ulfs_fhtovp(struct mount *, struct ulfs_ufid *, struct vnode **); 171 172 /* ulfs_vnops.c */ 173 void ulfs_vinit(struct mount *, int (**)(void *), 174 int (**)(void *), struct vnode **); 175 int ulfs_makeinode(int, struct vnode *, const struct ulfs_lookup_results *, 176 struct vnode **, struct componentname *); 177 int ulfs_gop_alloc(struct vnode *, off_t, off_t, int, kauth_cred_t); 178 void ulfs_gop_markupdate(struct vnode *, int); 179 180 /* 181 * Snapshot function prototypes. 182 */ 183 184 void ulfs_snapgone(struct inode *); 185 186 __END_DECLS 187 188 extern kmutex_t ulfs_ihash_lock; 189 extern kmutex_t ulfs_hashlock; 190 191 #endif /* !_UFS_LFS_ULFS_EXTERN_H_ */ 192