11541Srgrimes/*-
21541Srgrimes * Copyright (c) 1991, 1993, 1994
31541Srgrimes *	The Regents of the University of California.  All rights reserved.
41541Srgrimes *
51541Srgrimes * Redistribution and use in source and binary forms, with or without
61541Srgrimes * modification, are permitted provided that the following conditions
71541Srgrimes * are met:
81541Srgrimes * 1. Redistributions of source code must retain the above copyright
91541Srgrimes *    notice, this list of conditions and the following disclaimer.
101541Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
111541Srgrimes *    notice, this list of conditions and the following disclaimer in the
121541Srgrimes *    documentation and/or other materials provided with the distribution.
131541Srgrimes * 4. Neither the name of the University nor the names of its contributors
141541Srgrimes *    may be used to endorse or promote products derived from this software
151541Srgrimes *    without specific prior written permission.
161541Srgrimes *
171541Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
181541Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191541Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201541Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
211541Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221541Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231541Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241541Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251541Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261541Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271541Srgrimes * SUCH DAMAGE.
281541Srgrimes *
2922521Sdyson *	@(#)ufs_extern.h	8.10 (Berkeley) 5/14/95
3050477Speter * $FreeBSD: releng/11.0/sys/ufs/ufs/ufs_extern.h 262678 2014-03-02 02:52:34Z pfg $
311541Srgrimes */
321541Srgrimes
334464Sbde#ifndef _UFS_UFS_EXTERN_H_
344464Sbde#define	_UFS_UFS_EXTERN_H_
352177Spaul
3630779Sbdestruct componentname;
371541Srgrimesstruct direct;
3830779Sbdestruct indir;
391541Srgrimesstruct inode;
401541Srgrimesstruct mount;
4183366Sjulianstruct thread;
4228270Swollmanstruct sockaddr;
431541Srgrimesstruct ucred;
4430779Sbdestruct ufid;
4522521Sdysonstruct vfsconf;
461541Srgrimesstruct vnode;
4730779Sbdestruct vop_bmap_args;
4830779Sbdestruct vop_cachedlookup_args;
4930779Sbdestruct vop_generic_args;
5030779Sbdestruct vop_inactive_args;
5130779Sbdestruct vop_reclaim_args;
521541Srgrimes
53138290Sphkextern struct vop_vector ufs_fifoops;
54138290Sphkextern struct vop_vector ufs_vnodeops;
5530439Sphk
5692728Salfredint	 ufs_bmap(struct vop_bmap_args *);
57100344Smckusickint	 ufs_bmaparray(struct vnode *, ufs2_daddr_t, ufs2_daddr_t *,
58100344Smckusick	    struct buf *, int *, int *);
59222167Srmacklemint	 ufs_fhtovp(struct mount *, struct ufid *, int, struct vnode **);
60207141Sjeffint	 ufs_checkpath(ino_t, ino_t, struct inode *, struct ucred *, ino_t *);
6192728Salfredvoid	 ufs_dirbad(struct inode *, doff_t, char *);
6292728Salfredint	 ufs_dirbadentry(struct vnode *, struct direct *, int);
6392728Salfredint	 ufs_dirempty(struct inode *, ino_t, struct ucred *);
64100344Smckusickint	 ufs_extread(struct vop_read_args *);
65100344Smckusickint	 ufs_extwrite(struct vop_write_args *);
6692728Salfredvoid	 ufs_makedirentry(struct inode *, struct componentname *,
6792728Salfred	    struct direct *);
6892728Salfredint	 ufs_direnter(struct vnode *, struct vnode *, struct direct *,
69207141Sjeff	    struct componentname *, struct buf *, int);
7092728Salfredint	 ufs_dirremove(struct vnode *, struct inode *, int, int);
7192728Salfredint	 ufs_dirrewrite(struct inode *, struct inode *, ino_t, int, int);
72207141Sjeffint	 ufs_lookup_ino(struct vnode *, struct vnode **, struct componentname *,
73207141Sjeff	    ino_t *);
7498542Smckusickint	 ufs_getlbns(struct vnode *, ufs2_daddr_t, struct indir *, int *);
7592728Salfredint	 ufs_inactive(struct vop_inactive_args *);
7692728Salfredint	 ufs_init(struct vfsconf *);
7792728Salfredvoid	 ufs_itimes(struct vnode *vp);
7892728Salfredint	 ufs_lookup(struct vop_cachedlookup_args *);
79220985Skibvoid	 ufs_prepare_reclaim(struct vnode *vp);
8092728Salfredint	 ufs_readdir(struct vop_readdir_args *);
8192728Salfredint	 ufs_reclaim(struct vop_reclaim_args *);
8292728Salfredvoid	 ffs_snapgone(struct inode *);
83101777Sphkvfs_root_t ufs_root;
8499101Siedowseint	 ufs_uninit(struct vfsconf *);
85138290Sphkint	 ufs_vinit(struct mount *, struct vop_vector *, struct vnode **);
861541Srgrimes
87207141Sjeff#include <sys/sysctl.h>
88207141SjeffSYSCTL_DECL(_vfs_ufs);
89207141Sjeff
9034266Sjulian/*
9134266Sjulian * Soft update function prototypes.
9234266Sjulian */
9392728Salfredint	softdep_setup_directory_add(struct buf *, struct inode *, off_t,
9498542Smckusick	    ino_t, struct buf *, int);
95207141Sjeffvoid	softdep_change_directoryentry_offset(struct buf *, struct inode *,
96207141Sjeff	    caddr_t, caddr_t, caddr_t, int);
9792728Salfredvoid	softdep_setup_remove(struct buf *,struct inode *, struct inode *, int);
9892728Salfredvoid	softdep_setup_directory_change(struct buf *, struct inode *,
9998542Smckusick	    struct inode *, ino_t, int);
10092728Salfredvoid	softdep_change_linkcnt(struct inode *);
10192728Salfredint	softdep_slowdown(struct vnode *);
102207141Sjeffvoid	softdep_setup_create(struct inode *, struct inode *);
103207141Sjeffvoid	softdep_setup_dotdot_link(struct inode *, struct inode *);
104207141Sjeffvoid	softdep_setup_link(struct inode *, struct inode *);
105207141Sjeffvoid	softdep_setup_mkdir(struct inode *, struct inode *);
106207141Sjeffvoid	softdep_setup_rmdir(struct inode *, struct inode *);
107207141Sjeffvoid	softdep_setup_unlink(struct inode *, struct inode *);
108207141Sjeffvoid	softdep_revert_create(struct inode *, struct inode *);
109207141Sjeffvoid	softdep_revert_link(struct inode *, struct inode *);
110207141Sjeffvoid	softdep_revert_mkdir(struct inode *, struct inode *);
111207141Sjeffvoid	softdep_revert_rmdir(struct inode *, struct inode *);
11234266Sjulian
113100344Smckusick/*
114105422Sdillon * Flags to low-level allocation routines.  The low 16-bits are reserved
115105422Sdillon * for IO_ flags from vnode.h.
116105422Sdillon *
117105422Sdillon * Note: The general vfs code typically limits the sequential heuristic
118105422Sdillon * count to 127.  See sequential_heuristic() in kern/vfs_vnops.c
119100344Smckusick */
120262678Spfg#define	BA_CLRBUF	0x00010000	/* Clear invalid areas of buffer. */
121262678Spfg#define	BA_METAONLY	0x00020000	/* Return indirect block buffer. */
122248521Skib#define	BA_UNMAPPED	0x00040000	/* Do not mmap resulted buffer. */
123262678Spfg#define	BA_SEQMASK	0x7F000000	/* Bits holding seq heuristic. */
124262678Spfg#define	BA_SEQSHIFT	24
125262678Spfg#define	BA_SEQMAX	0x7F
12696072Sphk
1274464Sbde#endif /* !_UFS_UFS_EXTERN_H_ */
128