os161-1.99
 All Data Structures
sfs.h
00001 /*
00002  * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
00003  *      The President and Fellows of Harvard College.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University nor the names of its contributors
00014  *    may be used to endorse or promote products derived from this software
00015  *    without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00027  * SUCH DAMAGE.
00028  */
00029 
00030 #ifndef _SFS_H_
00031 #define _SFS_H_
00032 
00033 
00034 /*
00035  * Header for SFS, the Simple File System.
00036  */
00037 
00038 
00039 /*
00040  * Get abstract structure definitions
00041  */
00042 #include <fs.h>
00043 #include <vnode.h>
00044 
00045 /*
00046  * Get on-disk structures and constants that are made available to 
00047  * userland for the benefit of mksfs, dumpsfs, etc.
00048  */
00049 #include <kern/sfs.h>
00050 
00051 struct sfs_vnode {
00052         struct vnode sv_v;              /* abstract vnode structure */
00053         struct sfs_inode sv_i;          /* on-disk inode */
00054         uint32_t sv_ino;                /* inode number */
00055         bool sv_dirty;                  /* true if sv_i modified */
00056 };
00057 
00058 struct sfs_fs {
00059         struct fs sfs_absfs;            /* abstract filesystem structure */
00060         struct sfs_super sfs_super;     /* on-disk superblock */
00061         bool sfs_superdirty;            /* true if superblock modified */
00062         struct device *sfs_device;      /* device mounted on */
00063         struct vnodearray *sfs_vnodes;  /* vnodes loaded into memory */
00064         struct bitmap *sfs_freemap;     /* blocks in use are marked 1 */
00065         bool sfs_freemapdirty;          /* true if freemap modified */
00066 };
00067 
00068 /*
00069  * Function for mounting a sfs (calls vfs_mount)
00070  */
00071 int sfs_mount(const char *device);
00072 
00073 
00074 /*
00075  * Internal functions
00076  */
00077 
00078 /* Initialize uio structure */
00079 #define SFSUIO(iov, uio, ptr, block, rw) \
00080     uio_kinit(iov, uio, ptr, SFS_BLOCKSIZE, ((off_t)(block))*SFS_BLOCKSIZE, rw)
00081 
00082 /* Convenience functions for block I/O */
00083 int sfs_rwblock(struct sfs_fs *sfs, struct uio *uio);
00084 int sfs_rblock(struct sfs_fs *sfs, void *data, uint32_t block);
00085 int sfs_wblock(struct sfs_fs *sfs, void *data, uint32_t block);
00086 
00087 /* Get root vnode */
00088 struct vnode *sfs_getroot(struct fs *fs);
00089 
00090 
00091 #endif /* _SFS_H_ */
 All Data Structures