Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / ufs / lfs / lfs_extern.h @ 14

History | View | Annotate | Download (10 KB)

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