1*0a6a1f1dSLionel Sambuc /* $NetBSD: lfs_extern.h,v 1.110 2015/08/12 18:28:01 dholland Exp $ */ 2d65f6f70SBen Gras 3d65f6f70SBen Gras /*- 4d65f6f70SBen Gras * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. 5d65f6f70SBen Gras * All rights reserved. 6d65f6f70SBen Gras * 7d65f6f70SBen Gras * This code is derived from software contributed to The NetBSD Foundation 8d65f6f70SBen Gras * by Konrad E. Schroder <perseant@hhhh.org>. 9d65f6f70SBen Gras * 10d65f6f70SBen Gras * Redistribution and use in source and binary forms, with or without 11d65f6f70SBen Gras * modification, are permitted provided that the following conditions 12d65f6f70SBen Gras * are met: 13d65f6f70SBen Gras * 1. Redistributions of source code must retain the above copyright 14d65f6f70SBen Gras * notice, this list of conditions and the following disclaimer. 15d65f6f70SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 16d65f6f70SBen Gras * notice, this list of conditions and the following disclaimer in the 17d65f6f70SBen Gras * documentation and/or other materials provided with the distribution. 18d65f6f70SBen Gras * 19d65f6f70SBen Gras * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20d65f6f70SBen Gras * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21d65f6f70SBen Gras * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22d65f6f70SBen Gras * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23d65f6f70SBen Gras * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24d65f6f70SBen Gras * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25d65f6f70SBen Gras * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26d65f6f70SBen Gras * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27d65f6f70SBen Gras * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28d65f6f70SBen Gras * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29d65f6f70SBen Gras * POSSIBILITY OF SUCH DAMAGE. 30d65f6f70SBen Gras */ 31d65f6f70SBen Gras /*- 32d65f6f70SBen Gras * Copyright (c) 1991, 1993, 1994 33d65f6f70SBen Gras * The Regents of the University of California. All rights reserved. 34d65f6f70SBen Gras * 35d65f6f70SBen Gras * Redistribution and use in source and binary forms, with or without 36d65f6f70SBen Gras * modification, are permitted provided that the following conditions 37d65f6f70SBen Gras * are met: 38d65f6f70SBen Gras * 1. Redistributions of source code must retain the above copyright 39d65f6f70SBen Gras * notice, this list of conditions and the following disclaimer. 40d65f6f70SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 41d65f6f70SBen Gras * notice, this list of conditions and the following disclaimer in the 42d65f6f70SBen Gras * documentation and/or other materials provided with the distribution. 43d65f6f70SBen Gras * 3. Neither the name of the University nor the names of its contributors 44d65f6f70SBen Gras * may be used to endorse or promote products derived from this software 45d65f6f70SBen Gras * without specific prior written permission. 46d65f6f70SBen Gras * 47d65f6f70SBen Gras * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 48d65f6f70SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 49d65f6f70SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 50d65f6f70SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 51d65f6f70SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 52d65f6f70SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 53d65f6f70SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 54d65f6f70SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 55d65f6f70SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 56d65f6f70SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 57d65f6f70SBen Gras * SUCH DAMAGE. 58d65f6f70SBen Gras * 59d65f6f70SBen Gras * @(#)lfs_extern.h 8.6 (Berkeley) 5/8/95 60d65f6f70SBen Gras */ 61d65f6f70SBen Gras 62d65f6f70SBen Gras #ifndef _UFS_LFS_LFS_EXTERN_H_ 63d65f6f70SBen Gras #define _UFS_LFS_LFS_EXTERN_H_ 64d65f6f70SBen Gras 65d65f6f70SBen Gras #ifdef _KERNEL 66d65f6f70SBen Gras #include <sys/mallocvar.h> 67d65f6f70SBen Gras 68d65f6f70SBen Gras MALLOC_DECLARE(M_SEGMENT); 69d65f6f70SBen Gras #endif 70d65f6f70SBen Gras 71d65f6f70SBen Gras /* Copied from ext2fs for ITIMES. XXX This is a bogus use of v_tag. */ 72d65f6f70SBen Gras #define IS_LFS_VNODE(vp) (vp->v_tag == VT_LFS) 73d65f6f70SBen Gras 74d65f6f70SBen Gras /* 75d65f6f70SBen Gras * Sysctl values for LFS. 76d65f6f70SBen Gras */ 77d65f6f70SBen Gras #define LFS_WRITEINDIR 1 /* flush indirect blocks on non-checkpoint writes */ 78d65f6f70SBen Gras #define LFS_CLEAN_VNHEAD 2 /* put prev unrefed cleaned vnodes on head of free list */ 79d65f6f70SBen Gras #define LFS_DOSTATS 3 80d65f6f70SBen Gras #define LFS_MAXPAGES 4 81d65f6f70SBen Gras #define LFS_FS_PAGETRIP 5 82d65f6f70SBen Gras #define LFS_STATS 6 83d65f6f70SBen Gras #define LFS_DO_RFW 7 84d65f6f70SBen Gras #define LFS_DEBUGLOG 8 85d65f6f70SBen Gras #define LFS_IGNORE_LAZY_SYNC 9 86d65f6f70SBen Gras #define LFS_MAXID 10 87d65f6f70SBen Gras 88*0a6a1f1dSLionel Sambuc /* not ours */ 89d65f6f70SBen Gras struct fid; 90d65f6f70SBen Gras struct mount; 91d65f6f70SBen Gras struct nameidata; 92d65f6f70SBen Gras struct proc; 93d65f6f70SBen Gras struct statvfs; 94d65f6f70SBen Gras struct timeval; 95d65f6f70SBen Gras struct uio; 96d65f6f70SBen Gras struct mbuf; 97d65f6f70SBen Gras struct buf; 98d65f6f70SBen Gras struct vnode; 99*0a6a1f1dSLionel Sambuc 100*0a6a1f1dSLionel Sambuc /* ours */ 101*0a6a1f1dSLionel Sambuc struct inode; 102*0a6a1f1dSLionel Sambuc union lfs_dinode; 103d65f6f70SBen Gras struct dlfs; 104d65f6f70SBen Gras struct lfs; 105d65f6f70SBen Gras struct segment; 106d65f6f70SBen Gras struct block_info; 107d65f6f70SBen Gras 10884d9c625SLionel Sambuc __BEGIN_DECLS 10984d9c625SLionel Sambuc 110d65f6f70SBen Gras #if defined(_KERNEL) 111d65f6f70SBen Gras 112d65f6f70SBen Gras extern int lfs_allclean_wakeup; 113d65f6f70SBen Gras extern struct pool lfs_inode_pool; /* memory pool for inodes */ 114d65f6f70SBen Gras extern struct pool lfs_dinode_pool; /* memory pool for dinodes */ 115d65f6f70SBen Gras extern struct pool lfs_inoext_pool; /* memory pool for inode extension */ 116d65f6f70SBen Gras extern struct pool lfs_lbnentry_pool; /* memory pool for balloc accounting */ 117d65f6f70SBen Gras 118d65f6f70SBen Gras extern int locked_queue_count; 119d65f6f70SBen Gras extern long locked_queue_bytes; 120d65f6f70SBen Gras extern int lfs_subsys_pages; 121d65f6f70SBen Gras extern int lfs_dirvcount; 122d65f6f70SBen Gras extern kmutex_t lfs_lock; 123d65f6f70SBen Gras extern int lfs_debug_log_subsys[]; 124d65f6f70SBen Gras extern kcondvar_t lfs_writing_cv; 125d65f6f70SBen Gras extern kcondvar_t locked_queue_cv; 126d65f6f70SBen Gras 127d65f6f70SBen Gras /* lfs_alloc.c */ 128*0a6a1f1dSLionel Sambuc int lfs_valloc(struct vnode *, int, kauth_cred_t, ino_t *, int *); 129*0a6a1f1dSLionel Sambuc int lfs_valloc_fixed(struct lfs *, ino_t, int); 130d65f6f70SBen Gras int lfs_vfree(struct vnode *, ino_t, int); 131d65f6f70SBen Gras void lfs_order_freelist(struct lfs *); 132d65f6f70SBen Gras int lfs_extend_ifile(struct lfs *, kauth_cred_t); 133d65f6f70SBen Gras void lfs_orphan(struct lfs *, ino_t); 134d65f6f70SBen Gras 135d65f6f70SBen Gras /* lfs_balloc.c */ 136d65f6f70SBen Gras int lfs_balloc(struct vnode *, off_t, int, kauth_cred_t, int, struct buf **); 137d65f6f70SBen Gras void lfs_register_block(struct vnode *, daddr_t); 138d65f6f70SBen Gras void lfs_deregister_block(struct vnode *, daddr_t); 139d65f6f70SBen Gras void lfs_deregister_all(struct vnode *); 140d65f6f70SBen Gras 141d65f6f70SBen Gras /* lfs_bio.c */ 142d65f6f70SBen Gras int lfs_availwait(struct lfs *, int); 143d65f6f70SBen Gras int lfs_bwrite_ext(struct buf *, int); 144d65f6f70SBen Gras int lfs_fits(struct lfs *, int); 145d65f6f70SBen Gras void lfs_flush_fs(struct lfs *, int); 146d65f6f70SBen Gras void lfs_flush(struct lfs *, int, int); 147d65f6f70SBen Gras int lfs_check(struct vnode *, daddr_t, int); 148d65f6f70SBen Gras void lfs_freebuf(struct lfs *, struct buf *); 149d65f6f70SBen Gras struct buf *lfs_newbuf(struct lfs *, struct vnode *, daddr_t, size_t, int); 150d65f6f70SBen Gras void lfs_countlocked(int *, long *, const char *); 151d65f6f70SBen Gras int lfs_reserve(struct lfs *, struct vnode *, struct vnode *, int); 152d65f6f70SBen Gras 153d65f6f70SBen Gras /* lfs_debug.c */ 154d65f6f70SBen Gras #ifdef DEBUG 155d65f6f70SBen Gras int lfs_bwrite_log(struct buf *, const char *, int); 156d65f6f70SBen Gras void lfs_dumplog(void); 157d65f6f70SBen Gras void lfs_dump_super(struct lfs *); 158*0a6a1f1dSLionel Sambuc void lfs_dump_dinode(struct lfs *, union lfs_dinode *); 159d65f6f70SBen Gras void lfs_check_bpp(struct lfs *, struct segment *, char *, int); 160d65f6f70SBen Gras void lfs_check_segsum(struct lfs *, struct segment *, char *, int); 161d65f6f70SBen Gras void lfs_debug_log(int, const char *, ...); 162d65f6f70SBen Gras #endif /* DEBUG */ 163d65f6f70SBen Gras 164d65f6f70SBen Gras /* lfs_inode.c */ 165d65f6f70SBen Gras int lfs_update(struct vnode *, const struct timespec *, const struct timespec *, 166d65f6f70SBen Gras int); 167d65f6f70SBen Gras int lfs_truncate(struct vnode *, off_t, int, kauth_cred_t); 168*0a6a1f1dSLionel Sambuc union lfs_dinode *lfs_ifind(struct lfs *, ino_t, struct buf *); 169d65f6f70SBen Gras void lfs_finalize_ino_seguse(struct lfs *, struct inode *); 170d65f6f70SBen Gras void lfs_finalize_fs_seguse(struct lfs *); 171d65f6f70SBen Gras 17284d9c625SLionel Sambuc /* lfs_rename.c */ 17384d9c625SLionel Sambuc int lfs_rename(void *); 17484d9c625SLionel Sambuc 175d65f6f70SBen Gras /* lfs_rfw.c */ 176d65f6f70SBen Gras int lfs_rf_valloc(struct lfs *, ino_t, int, struct lwp *, struct vnode **); 177d65f6f70SBen Gras void lfs_roll_forward(struct lfs *, struct mount *, struct lwp *); 178d65f6f70SBen Gras 179d65f6f70SBen Gras /* lfs_segment.c */ 180d65f6f70SBen Gras void lfs_imtime(struct lfs *); 181d65f6f70SBen Gras int lfs_vflush(struct vnode *); 182d65f6f70SBen Gras int lfs_segwrite(struct mount *, int); 183d65f6f70SBen Gras int lfs_writefile(struct lfs *, struct segment *, struct vnode *); 184d65f6f70SBen Gras int lfs_writeinode(struct lfs *, struct segment *, struct inode *); 185d65f6f70SBen Gras int lfs_gatherblock(struct segment *, struct buf *, kmutex_t *); 186d65f6f70SBen Gras int lfs_gather(struct lfs *, struct segment *, struct vnode *, int (*match )(struct lfs *, struct buf *)); 187d65f6f70SBen Gras void lfs_update_single(struct lfs *, struct segment *, struct vnode *, 188*0a6a1f1dSLionel Sambuc daddr_t, daddr_t, int); 189d65f6f70SBen Gras void lfs_updatemeta(struct segment *); 190d65f6f70SBen Gras int lfs_rewind(struct lfs *, int); 191d65f6f70SBen Gras void lfs_unset_inval_all(struct lfs *); 192d65f6f70SBen Gras int lfs_initseg(struct lfs *); 193d65f6f70SBen Gras int lfs_writeseg(struct lfs *, struct segment *); 194d65f6f70SBen Gras void lfs_writesuper(struct lfs *, daddr_t); 195d65f6f70SBen Gras int lfs_match_data(struct lfs *, struct buf *); 196d65f6f70SBen Gras int lfs_match_indir(struct lfs *, struct buf *); 197d65f6f70SBen Gras int lfs_match_dindir(struct lfs *, struct buf *); 198d65f6f70SBen Gras int lfs_match_tindir(struct lfs *, struct buf *); 199d65f6f70SBen Gras void lfs_callback(struct buf *); 200d65f6f70SBen Gras void lfs_acquire_finfo(struct lfs *fs, ino_t, int); 201d65f6f70SBen Gras void lfs_release_finfo(struct lfs *fs); 202d65f6f70SBen Gras 203d65f6f70SBen Gras /* lfs_subr.c */ 204d65f6f70SBen Gras void lfs_setup_resblks(struct lfs *); 205d65f6f70SBen Gras void lfs_pad_check(unsigned char *, int, char *, int); 206d65f6f70SBen Gras void lfs_free_resblks(struct lfs *); 207d65f6f70SBen Gras void *lfs_malloc(struct lfs *, size_t, int); 208d65f6f70SBen Gras void lfs_free(struct lfs *, void *, int); 209d65f6f70SBen Gras int lfs_seglock(struct lfs *, unsigned long); 210d65f6f70SBen Gras void lfs_segunlock(struct lfs *); 211d65f6f70SBen Gras void lfs_segunlock_relock(struct lfs *); 212d65f6f70SBen Gras int lfs_writer_enter(struct lfs *, const char *); 213d65f6f70SBen Gras void lfs_writer_leave(struct lfs *); 214d65f6f70SBen Gras void lfs_wakeup_cleaner(struct lfs *); 215d65f6f70SBen Gras 216d65f6f70SBen Gras /* lfs_syscalls.c */ 217d65f6f70SBen Gras int lfs_do_segclean(struct lfs *, unsigned long); 218d65f6f70SBen Gras int lfs_segwait(fsid_t *, struct timeval *); 219*0a6a1f1dSLionel Sambuc int lfs_bmapv(struct lwp *, fsid_t *, struct block_info *, int); 220*0a6a1f1dSLionel Sambuc int lfs_markv(struct lwp *, fsid_t *, struct block_info *, int); 221d65f6f70SBen Gras 222d65f6f70SBen Gras /* lfs_vfsops.c */ 223*0a6a1f1dSLionel Sambuc VFS_PROTOS(lfs); 224d65f6f70SBen Gras void lfs_vinit(struct mount *, struct vnode **); 225d65f6f70SBen Gras int lfs_resize_fs(struct lfs *, int); 226d65f6f70SBen Gras 227d65f6f70SBen Gras /* lfs_vnops.c */ 228d65f6f70SBen Gras void lfs_mark_vnode(struct vnode *); 229d65f6f70SBen Gras void lfs_unmark_vnode(struct vnode *); 230d65f6f70SBen Gras int lfs_gop_alloc(struct vnode *, off_t, off_t, int, kauth_cred_t); 231d65f6f70SBen Gras void lfs_gop_size(struct vnode *, off_t, off_t *, int); 232d65f6f70SBen Gras int lfs_putpages_ext(void *, int); 233d65f6f70SBen Gras int lfs_gatherpages(struct vnode *); 23484d9c625SLionel Sambuc int lfs_flush_dirops(struct lfs *); 23584d9c625SLionel Sambuc int lfs_flush_pchain(struct lfs *); 236d65f6f70SBen Gras 237d65f6f70SBen Gras int lfs_bwrite (void *); 238d65f6f70SBen Gras int lfs_fsync (void *); 239d65f6f70SBen Gras int lfs_symlink (void *); 240d65f6f70SBen Gras int lfs_mknod (void *); 241d65f6f70SBen Gras int lfs_create (void *); 242d65f6f70SBen Gras int lfs_mkdir (void *); 243d65f6f70SBen Gras int lfs_read (void *); 244d65f6f70SBen Gras int lfs_remove (void *); 245d65f6f70SBen Gras int lfs_rmdir (void *); 246d65f6f70SBen Gras int lfs_link (void *); 247d65f6f70SBen Gras int lfs_mmap (void *); 248d65f6f70SBen Gras int lfs_rename (void *); 249d65f6f70SBen Gras int lfs_getattr (void *); 250d65f6f70SBen Gras int lfs_setattr (void *); 251d65f6f70SBen Gras int lfs_close (void *); 252d65f6f70SBen Gras int lfsspec_close(void *); 253d65f6f70SBen Gras int lfsfifo_close(void *); 254d65f6f70SBen Gras int lfs_fcntl (void *); 255d65f6f70SBen Gras int lfs_inactive (void *); 256d65f6f70SBen Gras int lfs_reclaim (void *); 257d65f6f70SBen Gras int lfs_strategy (void *); 258d65f6f70SBen Gras int lfs_write (void *); 259d65f6f70SBen Gras int lfs_getpages (void *); 260d65f6f70SBen Gras int lfs_putpages (void *); 261d65f6f70SBen Gras 262*0a6a1f1dSLionel Sambuc int lfs_bufrd(struct vnode *, struct uio *, int, kauth_cred_t); 263*0a6a1f1dSLionel Sambuc int lfs_bufwr(struct vnode *, struct uio *, int, kauth_cred_t); 264*0a6a1f1dSLionel Sambuc 265d65f6f70SBen Gras extern int lfs_mount_type; 266d65f6f70SBen Gras extern int (**lfs_vnodeop_p)(void *); 267d65f6f70SBen Gras extern int (**lfs_specop_p)(void *); 268d65f6f70SBen Gras extern int (**lfs_fifoop_p)(void *); 269d65f6f70SBen Gras extern const struct genfs_ops lfs_genfsops; 270d65f6f70SBen Gras 271d65f6f70SBen Gras #endif /* defined(_KERNEL) */ 272d65f6f70SBen Gras 273d65f6f70SBen Gras /* lfs_cksum.c */ 274d65f6f70SBen Gras u_int32_t cksum(void *, size_t); 275d65f6f70SBen Gras u_int32_t lfs_cksum_part(void *, size_t, u_int32_t); 276d65f6f70SBen Gras #define lfs_cksum_fold(sum) (sum) 277*0a6a1f1dSLionel Sambuc u_int32_t lfs_sb_cksum(struct lfs *); 278d65f6f70SBen Gras 279d65f6f70SBen Gras __END_DECLS 280d65f6f70SBen Gras 281d65f6f70SBen Gras #endif /* !_UFS_LFS_LFS_EXTERN_H_ */ 282