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 * @(#)ffs_extern.h 8.6 (Berkeley) 3/30/95 3050477Speter * $FreeBSD: stable/10/sys/ufs/ffs/ffs_extern.h 306175 2016-09-22 10:42:40Z kib $ 311541Srgrimes */ 321541Srgrimes 3315493Sbde#ifndef _UFS_FFS_EXTERN_H 3415493Sbde#define _UFS_FFS_EXTERN_H 3515493Sbde 36223169Smckusick#ifndef _KERNEL 37223169Smckusick#error "No user-serving parts inside" 38223169Smckusick#else 39223169Smckusick 4022521Sdysonstruct buf; 4177508Sjhbstruct cg; 421541Srgrimesstruct fid; 431541Srgrimesstruct fs; 441541Srgrimesstruct inode; 4533054Sbdestruct malloc_type; 461541Srgrimesstruct mount; 4783366Sjulianstruct thread; 4828270Swollmanstruct sockaddr; 491541Srgrimesstruct statfs; 5033054Sbdestruct ucred; 511541Srgrimesstruct vnode; 5234826Sbdestruct vop_fsync_args; 5333054Sbdestruct vop_reallocblks_args; 54207141Sjeffstruct workhead; 551541Srgrimes 56187790Srwatsonint ffs_alloc(struct inode *, ufs2_daddr_t, ufs2_daddr_t, int, int, 57187790Srwatson struct ucred *, ufs2_daddr_t *); 5898542Smckusickint ffs_balloc_ufs1(struct vnode *a_vp, off_t a_startoffset, int a_size, 5992728Salfred struct ucred *a_cred, int a_flags, struct buf **a_bpp); 6098542Smckusickint ffs_balloc_ufs2(struct vnode *a_vp, off_t a_startoffset, int a_size, 6198542Smckusick struct ucred *a_cred, int a_flags, struct buf **a_bpp); 6292728Salfredint ffs_blkatoff(struct vnode *, off_t, char **, struct buf **); 63140701Sjeffvoid ffs_blkfree(struct ufsmount *, struct fs *, struct vnode *, 64223127Smckusick ufs2_daddr_t, long, ino_t, enum vtype, struct workhead *); 6598542Smckusickufs2_daddr_t ffs_blkpref_ufs1(struct inode *, ufs_lbn_t, int, ufs1_daddr_t *); 6698542Smckusickufs2_daddr_t ffs_blkpref_ufs2(struct inode *, ufs_lbn_t, int, ufs2_daddr_t *); 67111239Smckusickint ffs_checkfreefile(struct fs *, struct vnode *, ino_t); 6898542Smckusickvoid ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t); 69207141Sjeffvoid ffs_clusteracct(struct fs *, struct cg *, ufs1_daddr_t, int); 70166193Skibvoid ffs_bdflush(struct bufobj *, struct buf *); 71136963Sphkint ffs_copyonwrite(struct vnode *, struct buf *); 7292728Salfredint ffs_flushfiles(struct mount *, int, struct thread *); 7392728Salfredvoid ffs_fragacct(struct fs *, int, int32_t [], int); 74140701Sjeffint ffs_freefile(struct ufsmount *, struct fs *, struct vnode *, ino_t, 75207141Sjeff int, struct workhead *); 76223114Smckusickvoid ffs_fserr(struct fs *, ino_t, char *); 7798542Smckusickint ffs_isblock(struct fs *, u_char *, ufs1_daddr_t); 78207141Sjeffint ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t); 79108315Sphkvoid ffs_load_inode(struct buf *, struct inode *, struct fs *, ino_t); 8092728Salfredint ffs_mountroot(void); 81207141Sjeffvoid ffs_oldfscompat_write(struct fs *, struct ufsmount *); 82243245Straszint ffs_own_mount(const struct mount *mp); 8392728Salfredint ffs_reallocblks(struct vop_reallocblks_args *); 84100344Smckusickint ffs_realloccg(struct inode *, ufs2_daddr_t, ufs2_daddr_t, 85187790Srwatson ufs2_daddr_t, int, int, int, struct ucred *, struct buf **); 86243245Straszint ffs_reload(struct mount *, struct thread *, int); 87163841Spjdint ffs_sbupdate(struct ufsmount *, int, int); 8898542Smckusickvoid ffs_setblock(struct fs *, u_char *, ufs1_daddr_t); 89223020Smckusickint ffs_snapblkfree(struct fs *, struct vnode *, ufs2_daddr_t, long, ino_t, 90223127Smckusick enum vtype, struct workhead *); 9192728Salfredvoid ffs_snapremove(struct vnode *vp); 9292728Salfredint ffs_snapshot(struct mount *mp, char *snapfile); 9392728Salfredvoid ffs_snapshot_mount(struct mount *mp); 9492728Salfredvoid ffs_snapshot_unmount(struct mount *mp); 95183073Skibvoid process_deferred_inactive(struct mount *mp); 96223020Smckusickvoid ffs_sync_snap(struct mount *, int); 97233438Smckusickint ffs_syncvnode(struct vnode *vp, int waitfor, int flags); 98234605Straszint ffs_truncate(struct vnode *, off_t, int, struct ucred *); 9992728Salfredint ffs_update(struct vnode *, int); 10092728Salfredint ffs_valloc(struct vnode *, int, struct ucred *, struct vnode **); 10130474Sphk 10292728Salfredint ffs_vfree(struct vnode *, ino_t, int); 103101777Sphkvfs_vget_t ffs_vget; 104182365Skibint ffs_vgetf(struct mount *, ino_t, int, struct vnode **, int); 105243245Straszvoid ffs_susp_initialize(void); 106243245Straszvoid ffs_susp_uninitialize(void); 1071541Srgrimes 108182365Skib#define FFSV_FORCEINSMQ 0x0001 109182365Skib 110306175Skib#define FFSR_FORCE 0x0001 111306175Skib#define FFSR_UNSUSPEND 0x0002 112306175Skib 113141542Sphkextern struct vop_vector ffs_vnodeops1; 114141542Sphkextern struct vop_vector ffs_fifoops1; 115141542Sphkextern struct vop_vector ffs_vnodeops2; 116141542Sphkextern struct vop_vector ffs_fifoops2; 11715493Sbde 11834266Sjulian/* 11934266Sjulian * Soft update function prototypes. 12034266Sjulian */ 121156451Stegge 122156451Steggeint softdep_check_suspend(struct mount *, struct vnode *, 123156451Stegge int, int, int, int); 124156451Steggevoid softdep_get_depcounts(struct mount *, int *, int *); 12592728Salfredvoid softdep_initialize(void); 12699206Siedowsevoid softdep_uninitialize(void); 12792728Salfredint softdep_mount(struct vnode *, struct mount *, struct fs *, 12892728Salfred struct ucred *); 129207141Sjeffvoid softdep_unmount(struct mount *); 130207141Sjeffint softdep_move_dependencies(struct buf *, struct buf *); 13192728Salfredint softdep_flushworklist(struct mount *, int *, struct thread *); 13292728Salfredint softdep_flushfiles(struct mount *, int, struct thread *); 13392728Salfredvoid softdep_update_inodeblock(struct inode *, struct buf *, int); 13492728Salfredvoid softdep_load_inodeblock(struct inode *); 13592728Salfredvoid softdep_freefile(struct vnode *, ino_t, int); 136220374Smckusickint softdep_request_cleanup(struct fs *, struct vnode *, 137220374Smckusick struct ucred *, int); 138100344Smckusickvoid softdep_setup_freeblocks(struct inode *, off_t, int); 139223325Sjeffvoid softdep_setup_inomapdep(struct buf *, struct inode *, ino_t, int); 140207141Sjeffvoid softdep_setup_blkmapdep(struct buf *, struct mount *, ufs2_daddr_t, 141207141Sjeff int, int); 14298542Smckusickvoid softdep_setup_allocdirect(struct inode *, ufs_lbn_t, ufs2_daddr_t, 14398542Smckusick ufs2_daddr_t, long, long, struct buf *); 144100344Smckusickvoid softdep_setup_allocext(struct inode *, ufs_lbn_t, ufs2_daddr_t, 145100344Smckusick ufs2_daddr_t, long, long, struct buf *); 14692728Salfredvoid softdep_setup_allocindir_meta(struct buf *, struct inode *, 14798542Smckusick struct buf *, int, ufs2_daddr_t); 14892728Salfredvoid softdep_setup_allocindir_page(struct inode *, ufs_lbn_t, 14998542Smckusick struct buf *, int, ufs2_daddr_t, ufs2_daddr_t, struct buf *); 150207141Sjeffvoid softdep_setup_blkfree(struct mount *, struct buf *, ufs2_daddr_t, int, 151207141Sjeff struct workhead *); 152207141Sjeffvoid softdep_setup_inofree(struct mount *, struct buf *, ino_t, 153207141Sjeff struct workhead *); 154207141Sjeffvoid softdep_setup_sbupdate(struct ufsmount *, struct fs *, struct buf *); 15592728Salfredvoid softdep_fsync_mountdev(struct vnode *); 156141522Sphkint softdep_sync_metadata(struct vnode *); 157222958Sjeffint softdep_sync_buf(struct vnode *, struct buf *, int); 158156203Sjeffint softdep_fsync(struct vnode *); 159207141Sjeffint softdep_prealloc(struct vnode *, int); 160207141Sjeffint softdep_journal_lookup(struct mount *, struct vnode **); 161222958Sjeffvoid softdep_journal_freeblocks(struct inode *, struct ucred *, off_t, int); 162222958Sjeffvoid softdep_journal_fsync(struct inode *); 163223020Smckusickvoid softdep_buf_append(struct buf *, struct workhead *); 164223020Smckusickvoid softdep_inode_append(struct inode *, struct ucred *, struct workhead *); 165223020Smckusickvoid softdep_freework(struct workhead *); 16634266Sjulian 167222958Sjeff 168219895Smckusick/* 169219895Smckusick * Things to request flushing in softdep_request_cleanup() 170219895Smckusick */ 171262779Spfg#define FLUSH_INODES 1 172262779Spfg#define FLUSH_INODES_WAIT 2 173262779Spfg#define FLUSH_BLOCKS 3 174262779Spfg#define FLUSH_BLOCKS_WAIT 4 175232351Smckusick/* 176233438Smckusick * Flag to ffs_syncvnode() to request flushing of data only, 177232351Smckusick * but skip the ffs_update() on the inode itself. Used to avoid 178232351Smckusick * deadlock when flushing snapshot inodes while holding snaplk. 179232351Smckusick */ 180233438Smckusick#define NO_INO_UPDT 0x00000001 181207141Sjeff 182183070Skibint ffs_rdonly(struct inode *); 183183070Skib 184223020SmckusickTAILQ_HEAD(snaphead, inode); 185223020Smckusick 186223020Smckusickstruct snapdata { 187223020Smckusick LIST_ENTRY(snapdata) sn_link; 188223020Smckusick struct snaphead sn_head; 189223020Smckusick daddr_t sn_listsize; 190223020Smckusick daddr_t *sn_blklist; 191223020Smckusick struct lock sn_lock; 192223020Smckusick}; 193223169Smckusick 194223052Sdim#endif /* _KERNEL */ 195223020Smckusick 19615493Sbde#endif /* !_UFS_FFS_EXTERN_H */ 197