1 /* $NetBSD: ffs_extern.h,v 1.22 2002/05/05 17:00:06 chs Exp $ */ 2 3 /*- 4 * Copyright (c) 1991, 1993, 1994 5 * The Regents of the University of California. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by the University of 18 * California, Berkeley and its contributors. 19 * 4. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)ffs_extern.h 8.6 (Berkeley) 3/30/95 36 */ 37 38 /* 39 * Sysctl values for the fast filesystem. 40 */ 41 #define FFS_CLUSTERREAD 1 /* cluster reading enabled */ 42 #define FFS_CLUSTERWRITE 2 /* cluster writing enabled */ 43 #define FFS_REALLOCBLKS 3 /* block reallocation enabled */ 44 #define FFS_ASYNCFREE 4 /* asynchronous block freeing enabled */ 45 #define FFS_LOG_CHANGEOPT 5 /* log optimalization strategy change */ 46 #define FFS_MAXID 6 /* number of valid ffs ids */ 47 48 #define FFS_NAMES { \ 49 { 0, 0 }, \ 50 { "doclusterread", CTLTYPE_INT }, \ 51 { "doclusterwrite", CTLTYPE_INT }, \ 52 { "doreallocblks", CTLTYPE_INT }, \ 53 { "doasyncfree", CTLTYPE_INT }, \ 54 { "log_changeopt", CTLTYPE_INT }, \ 55 } 56 57 struct buf; 58 struct fid; 59 struct fs; 60 struct inode; 61 struct dinode; 62 struct mount; 63 struct nameidata; 64 struct proc; 65 struct statfs; 66 struct timeval; 67 struct ucred; 68 struct ufsmount; 69 struct uio; 70 struct vnode; 71 struct mbuf; 72 struct cg; 73 74 extern struct pool ffs_inode_pool; /* memory pool for inodes */ 75 76 __BEGIN_DECLS 77 78 /* ffs_alloc.c */ 79 int ffs_alloc __P((struct inode *, ufs_daddr_t, ufs_daddr_t , int, struct ucred *, 80 ufs_daddr_t *)); 81 int ffs_realloccg __P((struct inode *, ufs_daddr_t, ufs_daddr_t, int, int , 82 struct ucred *, struct buf **, ufs_daddr_t *)); 83 int ffs_reallocblks __P((void *)); 84 int ffs_valloc __P((void *)); 85 ufs_daddr_t ffs_blkpref __P((struct inode *, ufs_daddr_t, int, ufs_daddr_t *)); 86 void ffs_blkfree __P((struct inode *, ufs_daddr_t, long)); 87 int ffs_vfree __P((void *)); 88 void ffs_clusteracct __P((struct fs *, struct cg *, ufs_daddr_t, int)); 89 90 /* ffs_balloc.c */ 91 int ffs_balloc __P((void *)); 92 int ffs_gop_alloc __P((struct vnode *, off_t, off_t, int, struct ucred *)); 93 94 /* ffs_bswap.c */ 95 void ffs_sb_swap __P((struct fs*, struct fs *)); 96 void ffs_dinode_swap __P((struct dinode *, struct dinode *)); 97 void ffs_csum_swap __P((struct csum *, struct csum *, int)); 98 99 /* ffs_inode.c */ 100 int ffs_update __P((void *)); 101 int ffs_truncate __P((void *)); 102 103 /* ffs_subr.c */ 104 int ffs_blkatoff __P((void *)); 105 int ffs_freefile __P((void *)); 106 void ffs_fragacct __P((struct fs *, int, int32_t[], int, int)); 107 #ifdef DIAGNOSTIC 108 void ffs_checkoverlap __P((struct buf *, struct inode *)); 109 #endif 110 int ffs_isblock __P((struct fs *, u_char *, ufs_daddr_t)); 111 int ffs_isfreeblock __P((struct fs *, u_char *, ufs_daddr_t)); 112 void ffs_clrblock __P((struct fs *, u_char *, ufs_daddr_t)); 113 void ffs_setblock __P((struct fs *, u_char *, ufs_daddr_t)); 114 115 /* ffs_vfsops.c */ 116 void ffs_init __P((void)); 117 void ffs_reinit __P((void)); 118 void ffs_done __P((void)); 119 int ffs_mountroot __P((void)); 120 int ffs_mount __P((struct mount *, const char *, void *, struct nameidata *, 121 struct proc *)); 122 int ffs_reload __P((struct mount *, struct ucred *, struct proc *)); 123 int ffs_mountfs __P((struct vnode *, struct mount *, struct proc *)); 124 int ffs_oldfscompat __P((struct fs *)); 125 int ffs_unmount __P((struct mount *, int, struct proc *)); 126 int ffs_flushfiles __P((struct mount *, int, struct proc *)); 127 int ffs_statfs __P((struct mount *, struct statfs *, struct proc *)); 128 int ffs_sync __P((struct mount *, int, struct ucred *, struct proc *)); 129 int ffs_vget __P((struct mount *, ino_t, struct vnode **)); 130 int ffs_fhtovp __P((struct mount *, struct fid *, struct vnode **)); 131 int ffs_vptofh __P((struct vnode *, struct fid *)); 132 int ffs_sysctl __P((int *, u_int, void *, size_t *, void *, size_t, 133 struct proc *)); 134 int ffs_sbupdate __P((struct ufsmount *, int)); 135 int ffs_cgupdate __P((struct ufsmount *, int)); 136 137 /* ffs_vnops.c */ 138 int ffs_read __P((void *)); 139 int ffs_write __P((void *)); 140 int ffs_fsync __P((void *)); 141 int ffs_reclaim __P((void *)); 142 int ffs_getpages __P((void *)); 143 int ffs_putpages __P((void *)); 144 void ffs_gop_size __P((struct vnode *, off_t, off_t *)); 145 __END_DECLS 146 147 148 /* 149 * Soft dependency function prototypes. 150 */ 151 void softdep_initialize __P((void)); 152 void softdep_reinitialize __P((void)); 153 int softdep_mount __P((struct vnode *, struct mount *, struct fs *, 154 struct ucred *)); 155 int softdep_flushfiles __P((struct mount *, int, struct proc *)); 156 void softdep_update_inodeblock __P((struct inode *, struct buf *, int)); 157 void softdep_load_inodeblock __P((struct inode *)); 158 void softdep_freefile __P((void *)); 159 void softdep_setup_freeblocks __P((struct inode *, off_t)); 160 void softdep_setup_inomapdep __P((struct buf *, struct inode *, ino_t)); 161 void softdep_setup_blkmapdep __P((struct buf *, struct fs *, ufs_daddr_t)); 162 void softdep_setup_allocdirect __P((struct inode *, ufs_lbn_t, ufs_daddr_t, 163 ufs_daddr_t, long, long, struct buf *)); 164 void softdep_setup_allocindir_meta __P((struct buf *, struct inode *, 165 struct buf *, int, ufs_daddr_t)); 166 void softdep_setup_allocindir_page __P((struct inode *, ufs_lbn_t, 167 struct buf *, int, ufs_daddr_t, ufs_daddr_t, struct buf *)); 168 void softdep_fsync_mountdev __P((struct vnode *)); 169 int softdep_sync_metadata __P((void *)); 170 171 extern int (**ffs_vnodeop_p) __P((void *)); 172 extern int (**ffs_specop_p) __P((void *)); 173 extern int (**ffs_fifoop_p) __P((void *)); 174 175 176