| /* Copyright (c) 2009, 2010 The Regents of the University of California | 
 |  * Barret Rhoden <brho@cs.berkeley.edu> | 
 |  * See LICENSE for details. | 
 |  * | 
 |  * KFS (Kernel File System) | 
 |  * | 
 |  * This is a cheap FS that is based off of a CPIO archive appended to the end of | 
 |  * the kernel binary image. */ | 
 |  | 
 | #pragma once | 
 |  | 
 | #include <ros/common.h> | 
 | #include <vfs.h> | 
 |  | 
 | /* Every FS must extern it's type, and be included in vfs_init() */ | 
 | extern struct fs_type kfs_fs_type; | 
 |  | 
 | /* KFS-specific inode info.  Could use a union, but I want to init filestart to | 
 |  * 0 to catch bugs. */ | 
 | struct kfs_i_info { | 
 | 	struct dentry_tailq		children;		/* our childrens */ | 
 | 	void					*filestart;		/* or our file location */ | 
 | 	size_t					init_size;		/* file size on the backing store */ | 
 | }; | 
 |  | 
 | /* KFS VFS functions.  Exported for use by similar FSs (devices, for now) */ | 
 | struct super_block *kfs_get_sb(struct fs_type *fs, int flags, | 
 |                                char *dev_name, struct vfsmount *vmnt); | 
 | void kfs_kill_sb(struct super_block *sb); | 
 | /* Page Map Operations */ | 
 | int kfs_readpage(struct page_map *pm, struct page *page); | 
 | /* Super Operations */ | 
 | struct inode *kfs_alloc_inode(struct super_block *sb); | 
 | void kfs_dealloc_inode(struct inode *inode); | 
 | void kfs_read_inode(struct inode *inode); | 
 | void kfs_dirty_inode(struct inode *inode); | 
 | void kfs_write_inode(struct inode *inode, bool wait); | 
 | void kfs_put_inode(struct inode *inode); | 
 | void kfs_drop_inode(struct inode *inode); | 
 | void kfs_delete_inode(struct inode *inode); | 
 | void kfs_put_super(struct super_block *sb); | 
 | void kfs_write_super(struct super_block *sb); | 
 | int kfs_sync_fs(struct super_block *sb, bool wait); | 
 | int kfs_remount_fs(struct super_block *sb, int flags, char *data); | 
 | void kfs_umount_begin(struct super_block *sb); | 
 | /* inode_operations */ | 
 | int kfs_create(struct inode *dir, struct dentry *dentry, int mode, | 
 |                struct nameidata *nd); | 
 | struct dentry *kfs_lookup(struct inode *dir, struct dentry *dentry, | 
 |                           struct nameidata *nd); | 
 | int kfs_link(struct dentry *old_dentry, struct inode *dir, | 
 |              struct dentry *new_dentry); | 
 | int kfs_unlink(struct inode *dir, struct dentry *dentry); | 
 | int kfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname); | 
 | int kfs_mkdir(struct inode *dir, struct dentry *dentry, int mode); | 
 | int kfs_rmdir(struct inode *dir, struct dentry *dentry); | 
 | int kfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev); | 
 | int kfs_rename(struct inode *old_dir, struct dentry *old_dentry, | 
 |                struct inode *new_dir, struct dentry *new_dentry); | 
 | char *kfs_readlink(struct dentry *dentry); | 
 | void kfs_truncate(struct inode *inode); | 
 | int kfs_permission(struct inode *inode, int mode, struct nameidata *nd); | 
 | /* dentry_operations */ | 
 | int kfs_d_revalidate(struct dentry *dir, struct nameidata *nd); | 
 | int kfs_d_compare(struct dentry *dir, struct qstr *name1, struct qstr *name2); | 
 | int kfs_d_delete(struct dentry *dentry); | 
 | int kfs_d_release(struct dentry *dentry); | 
 | void kfs_d_iput(struct dentry *dentry, struct inode *inode); | 
 | /* file_operations */ | 
 | int kfs_llseek(struct file *file, off64_t offset, off64_t *ret, int whence); | 
 | int kfs_readdir(struct file *dir, struct dirent *dirent); | 
 | int kfs_mmap(struct file *file, struct vm_region *vmr); | 
 | int kfs_open(struct inode *inode, struct file *file); | 
 | int kfs_flush(struct file *file); | 
 | int kfs_release(struct inode *inode, struct file *file); | 
 | int kfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 
 | unsigned int kfs_poll(struct file *file, struct poll_table_struct *poll_table); | 
 | ssize_t kfs_readv(struct file *file, const struct iovec *vector, | 
 |                   unsigned long count, off64_t *offset); | 
 | ssize_t kfs_writev(struct file *file, const struct iovec *vector, | 
 |                   unsigned long count, off64_t *offset); | 
 | ssize_t kfs_sendpage(struct file *file, struct page *page, int offset, | 
 |                      size_t size, off64_t pos, int more); | 
 | int kfs_check_flags(int flags); |