xref: /minix3/sys/ufs/lfs/lfs_extern.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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