root/ufs/ffs/ffs_extern.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: ffs_extern.h,v 1.32 2007/06/01 20:23:25 pedro Exp $   */
    2 /*      $NetBSD: ffs_extern.h,v 1.4 1996/02/09 22:22:22 christos 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  *      @(#)ffs_extern.h        8.3 (Berkeley) 4/16/94
   33  */
   34 
   35 #define FFS_CLUSTERREAD         1       /* cluster reading enabled */
   36 #define FFS_CLUSTERWRITE        2       /* cluster writing enabled */
   37 #define FFS_REALLOCBLKS         3       /* block reallocation enabled */
   38 #define FFS_ASYNCFREE           4       /* asynchronous block freeing enabled */
   39 #define FFS_MAX_SOFTDEPS        5       /* maximum structs before slowdown */
   40 #define FFS_SD_TICKDELAY        6       /* ticks to pause during slowdown */
   41 #define FFS_SD_WORKLIST_PUSH    7       /* # of worklist cleanups */
   42 #define FFS_SD_BLK_LIMIT_PUSH   8       /* # of times block limit neared */
   43 #define FFS_SD_INO_LIMIT_PUSH   9       /* # of times inode limit neared */
   44 #define FFS_SD_BLK_LIMIT_HIT    10      /* # of times block slowdown imposed */
   45 #define FFS_SD_INO_LIMIT_HIT    11      /* # of times inode slowdown imposed */
   46 #define FFS_SD_SYNC_LIMIT_HIT   12      /* # of synchronous slowdowns imposed */
   47 #define FFS_SD_INDIR_BLK_PTRS   13      /* bufs redirtied as indir ptrs not written */
   48 #define FFS_SD_INODE_BITMAP     14      /* bufs redirtied as inode bitmap not written */
   49 #define FFS_SD_DIRECT_BLK_PTRS  15      /* bufs redirtied as direct ptrs not written */
   50 #define FFS_SD_DIR_ENTRY        16      /* bufs redirtied as dir entry cannot write */
   51 #define FFS_DIRHASH_DIRSIZE     17      /* min directory size, in bytes */
   52 #define FFS_DIRHASH_MAXMEM      18      /* max kvm to use, in bytes */
   53 #define FFS_DIRHASH_MEM         19      /* current mem usage, in bytes */
   54 #define FFS_MAXID               20      /* number of valid ffs ids */
   55 
   56 #define FFS_NAMES { \
   57         { 0, 0 }, \
   58         { "doclusterread", CTLTYPE_INT }, \
   59         { "doclusterwrite", CTLTYPE_INT }, \
   60         { "doreallocblks", CTLTYPE_INT }, \
   61         { "doasyncfree", CTLTYPE_INT }, \
   62         { "max_softdeps", CTLTYPE_INT }, \
   63         { "sd_tickdelay", CTLTYPE_INT }, \
   64         { "sd_worklist_push", CTLTYPE_INT }, \
   65         { "sd_blk_limit_push", CTLTYPE_INT }, \
   66         { "sd_ino_limit_push", CTLTYPE_INT }, \
   67         { "sd_blk_limit_hit", CTLTYPE_INT }, \
   68         { "sd_ino_limit_hit", CTLTYPE_INT }, \
   69         { "sd_sync_limit_hit", CTLTYPE_INT }, \
   70         { "sd_indir_blk_ptrs", CTLTYPE_INT }, \
   71         { "sd_inode_bitmap", CTLTYPE_INT }, \
   72         { "sd_direct_blk_ptrs", CTLTYPE_INT }, \
   73         { "sd_dir_entry", CTLTYPE_INT }, \
   74         { "dirhash_dirsize", CTLTYPE_INT }, \
   75         { "dirhash_maxmem", CTLTYPE_INT }, \
   76         { "dirhash_mem", CTLTYPE_INT }, \
   77 }
   78 
   79 struct buf;
   80 struct fid;
   81 struct fs;
   82 struct inode;
   83 struct mount;
   84 struct nameidata;
   85 struct proc;
   86 struct statfs;
   87 struct timeval;
   88 struct ucred;
   89 struct ufsmount;
   90 struct vfsconf;
   91 struct uio;
   92 struct vnode;
   93 struct mbuf;
   94 struct cg;
   95 struct vop_vfree_args;
   96 
   97 __BEGIN_DECLS
   98 
   99 /* ffs_alloc.c */
  100 int ffs_alloc(struct inode *, daddr_t, daddr_t , int, struct ucred *,
  101                    daddr_t *);
  102 int ffs_realloccg(struct inode *, daddr_t, daddr_t, int, int ,
  103                        struct ucred *, struct buf **, daddr_t *);
  104 int ffs_reallocblks(void *);
  105 int ffs_inode_alloc(struct inode *, mode_t, struct ucred *, struct vnode **);
  106 int ffs_inode_free(struct inode *, ino_t, mode_t);
  107 int ffs_freefile(struct inode *, ino_t, mode_t);
  108 
  109 int32_t ffs1_blkpref(struct inode *, daddr_t, int, int32_t *);
  110 #ifdef FFS2
  111 int64_t ffs2_blkpref(struct inode *, daddr_t, int, int64_t *);
  112 #endif
  113 void ffs_blkfree(struct inode *, daddr64_t, long);
  114 void ffs_clusteracct(struct fs *, struct cg *, daddr_t, int);
  115 
  116 /* ffs_balloc.c */
  117 int ffs_balloc(struct inode *, off_t, int, struct ucred *, int, struct buf **);
  118 
  119 /* ffs_inode.c */
  120 int ffs_init(struct vfsconf *);
  121 int ffs_update(struct inode *, struct timespec *, struct timespec *, int);
  122 int ffs_truncate(struct inode *, off_t, int, struct ucred *);
  123 
  124 /* ffs_subr.c */
  125 int ffs_bufatoff(struct inode *, off_t, char **, struct buf **);
  126 void ffs_fragacct(struct fs *, int, int32_t[], int);
  127 #ifdef DIAGNOSTIC
  128 void    ffs_checkoverlap(struct buf *, struct inode *);
  129 #endif
  130 int   ffs_isfreeblock(struct fs *, unsigned char *, daddr_t);
  131 int ffs_isblock(struct fs *, unsigned char *, daddr_t);
  132 void ffs_clrblock(struct fs *, u_char *, daddr_t);
  133 void ffs_setblock(struct fs *, unsigned char *, daddr_t);
  134 
  135 /* ffs_vfsops.c */
  136 int ffs_mountroot(void);
  137 int ffs_mount(struct mount *, const char *, void *, struct nameidata *,
  138                    struct proc *);
  139 int ffs_reload(struct mount *, struct ucred *, struct proc *);
  140 int ffs_mountfs(struct vnode *, struct mount *, struct proc *);
  141 int ffs_oldfscompat(struct fs *);
  142 int ffs_unmount(struct mount *, int, struct proc *);
  143 int ffs_flushfiles(struct mount *, int, struct proc *);
  144 int ffs_statfs(struct mount *, struct statfs *, struct proc *);
  145 int ffs_sync(struct mount *, int, struct ucred *, struct proc *);
  146 int ffs_vget(struct mount *, ino_t, struct vnode **);
  147 int ffs_fhtovp(struct mount *, struct fid *, struct vnode **);
  148 int ffs_vptofh(struct vnode *, struct fid *);
  149 int ffs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
  150                     struct proc *);
  151 int ffs_sbupdate(struct ufsmount *, int);
  152 int ffs_cgupdate(struct ufsmount *, int);
  153 
  154 /* ffs_vnops.c */
  155 int ffs_read(void *);
  156 int ffs_write(void *);
  157 int ffs_fsync(void *);
  158 int ffs_reclaim(void *);
  159 int ffsfifo_reclaim(void *);
  160 
  161 /*
  162  * Soft dependency function prototypes.
  163  */
  164 
  165 struct vop_vfree_args;
  166 struct vop_fsync_args;
  167 
  168 void  softdep_initialize(void);
  169 int   softdep_process_worklist(struct mount *);
  170 int   softdep_mount(struct vnode *, struct mount *, struct fs *,
  171           struct ucred *);
  172 int   softdep_flushworklist(struct mount *, int *, struct proc *);
  173 int   softdep_flushfiles(struct mount *, int, struct proc *);
  174 void  softdep_update_inodeblock(struct inode *, struct buf *, int);
  175 void  softdep_load_inodeblock(struct inode *);
  176 void  softdep_freefile(struct vnode *, ino_t, mode_t);
  177 void  softdep_setup_freeblocks(struct inode *, off_t);
  178 void  softdep_setup_inomapdep(struct buf *, struct inode *, ino_t);
  179 void  softdep_setup_blkmapdep(struct buf *, struct fs *, daddr_t);
  180 void  softdep_setup_allocdirect(struct inode *, daddr64_t, daddr_t,
  181             daddr_t, long, long, struct buf *);
  182 void  softdep_setup_allocindir_meta(struct buf *, struct inode *,
  183             struct buf *, int, daddr_t);
  184 void  softdep_setup_allocindir_page(struct inode *, daddr64_t,
  185             struct buf *, int, daddr_t, daddr_t, struct buf *);
  186 void  softdep_fsync_mountdev(struct vnode *, int);
  187 int   softdep_sync_metadata(struct vop_fsync_args *);
  188 int   softdep_fsync(struct vnode *);
  189 __END_DECLS
  190 
  191 extern int (**ffs_vnodeop_p)(void *);
  192 extern int (**ffs_specop_p)(void *);
  193 #ifdef FIFO
  194 extern int (**ffs_fifoop_p)(void *);
  195 #define FFS_FIFOOPS ffs_fifoop_p
  196 #else
  197 #define FFS_FIFOOPS NULL
  198 #endif
  199 
  200 extern struct pool ffs_ino_pool;        /* memory pool for inodes */
  201 extern struct pool ffs_dinode1_pool;    /* memory pool for UFS1 dinodes */
  202 #ifdef FFS2
  203 extern struct pool ffs_dinode2_pool;    /* memory pool for UFS2 dinodes */
  204 #endif

/* [<][>][^][v][top][bottom][index][help] */