blob: 1913a93ad2c758a7bcf4414dde98d78796b3c9fd [file] [log] [blame] [edit]
/* 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);