/* [<][>][^][v][top][bottom][index][help] */
1 /*
2 * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
3 * The President and Fellows of Harvard College.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30 #ifndef _SFS_H_
31 #define _SFS_H_
32
33
34 /*
35 * Header for SFS, the Simple File System.
36 */
37
38
39 /*
40 * Get abstract structure definitions
41 */
42 #include <fs.h>
43 #include <vnode.h>
44
45 /*
46 * Get on-disk structures and constants that are made available to
47 * userland for the benefit of mksfs, dumpsfs, etc.
48 */
49 #include <kern/sfs.h>
50
51 struct sfs_vnode {
52 struct vnode sv_v; /* abstract vnode structure */
53 struct sfs_inode sv_i; /* on-disk inode */
54 uint32_t sv_ino; /* inode number */
55 bool sv_dirty; /* true if sv_i modified */
56 };
57
58 struct sfs_fs {
59 struct fs sfs_absfs; /* abstract filesystem structure */
60 struct sfs_super sfs_super; /* on-disk superblock */
61 bool sfs_superdirty; /* true if superblock modified */
62 struct device *sfs_device; /* device mounted on */
63 struct vnodearray *sfs_vnodes; /* vnodes loaded into memory */
64 struct bitmap *sfs_freemap; /* blocks in use are marked 1 */
65 bool sfs_freemapdirty; /* true if freemap modified */
66 };
67
68 /*
69 * Function for mounting a sfs (calls vfs_mount)
70 */
71 int sfs_mount(const char *device);
72
73
74 /*
75 * Internal functions
76 */
77
78 /* Initialize uio structure */
79 #define SFSUIO(iov, uio, ptr, block, rw) \
80 uio_kinit(iov, uio, ptr, SFS_BLOCKSIZE, ((off_t)(block))*SFS_BLOCKSIZE, rw)
81
82 /* Convenience functions for block I/O */
83 int sfs_rwblock(struct sfs_fs *sfs, struct uio *uio);
84 int sfs_rblock(struct sfs_fs *sfs, void *data, uint32_t block);
85 int sfs_wblock(struct sfs_fs *sfs, void *data, uint32_t block);
86
87 /* Get root vnode */
88 struct vnode *sfs_getroot(struct fs *fs);
89
90
91 #endif /* _SFS_H_ */