MOS Source Code
|
#include "mos/assert.h"
#include "mos/device/timer.h"
#include "mos/filesystem/inode.h"
#include "mos/filesystem/mount.h"
#include "mos/filesystem/page_cache.h"
#include "mos/filesystem/sysfs/sysfs.h"
#include "mos/filesystem/sysfs/sysfs_autoinit.h"
#include "mos/mm/mm.h"
#include "mos/mm/mmstat.h"
#include "mos/mm/physical/pmm.h"
#include "mos/mm/slab_autoinit.h"
#include <dirent.h>
#include <errno.h>
#include <mos/filesystem/dentry.h>
#include <mos/filesystem/fs_types.h>
#include <mos/filesystem/vfs.h>
#include <mos/filesystem/vfs_types.h>
#include <mos/io/io.h>
#include <mos/lib/structures/list.h>
#include <mos/lib/structures/tree.h>
#include <mos/lib/sync/spinlock.h>
#include <mos/mos_global.h>
#include <mos/platform/platform.h>
#include <mos/syslog/printk.h>
#include <mos/tasks/process.h>
#include <mos/types.h>
#include <mos_stdlib.h>
#include <mos_string.h>
Go to the source code of this file.
Functions | |
SLAB_AUTOINIT ("superblock", superblock_cache, superblock_t) | |
SLAB_AUTOINIT ("mount", mount_cache, mount_t) | |
SLAB_AUTOINIT ("file", file_cache, file_t) | |
static long | do_pagecache_flush (file_t *file, off_t pgoff, size_t npages) |
static long | do_sync_inode (file_t *file) |
static void | vfs_io_ops_close (io_t *io) |
static void | vfs_io_ops_close_dir (io_t *io) |
static size_t | vfs_io_ops_read (io_t *io, void *buf, size_t count) |
static size_t | vfs_io_ops_write (io_t *io, const void *buf, size_t count) |
static off_t | vfs_io_ops_seek (io_t *io, off_t offset, io_seek_whence_t whence) |
static vmfault_result_t | vfs_fault_handler (vmap_t *vmap, ptr_t fault_addr, pagefault_t *info) |
static bool | vfs_io_ops_mmap (io_t *io, vmap_t *vmap, off_t offset) |
static bool | vfs_io_ops_munmap (io_t *io, vmap_t *vmap, bool *unmapped) |
static void | vfs_io_ops_getname (const io_t *io, char *buf, size_t size) |
static void | vfs_flusher_entry (void *arg) |
static void | vfs_flusher_init (void) |
MOS_INIT (KTHREAD, vfs_flusher_init) | |
static void | vfs_copy_stat (file_stat_t *statbuf, inode_t *inode) |
static filesystem_t * | vfs_find_filesystem (const char *name) |
static bool | vfs_verify_permissions (dentry_t *file_dentry, bool open, bool read, bool create, bool execute, bool write) |
static file_t * | vfs_do_open (dentry_t *base, const char *path, open_flags flags) |
file_t * | vfs_do_open_dentry (dentry_t *entry, bool created, bool read, bool write, bool exec, bool truncate) |
Open an directory dentry. | |
void | vfs_register_filesystem (filesystem_t *fs) |
long | vfs_mount (const char *device, const char *path, const char *fs, const char *options) |
Mount a filesystem at a given existing path. | |
long | vfs_unmount (const char *path) |
Unmount a filesystem at a given path. | |
file_t * | vfs_openat (int fd, const char *path, open_flags flags) |
Open a file at a given path. | |
long | vfs_fstatat (fd_t fd, const char *path, file_stat_t *restrict statbuf, fstatat_flags flags) |
Stat a file. | |
size_t | vfs_readlinkat (fd_t dirfd, const char *path, char *buf, size_t size) |
Read a symbolic link. | |
long | vfs_symlink (const char *path, const char *target) |
Create a symbolic link. | |
long | vfs_mkdir (const char *path) |
Create a directory. | |
long | vfs_rmdir (const char *path) |
size_t | vfs_list_dir (io_t *io, void *user_buf, size_t user_size) |
Get the content of a directory. | |
long | vfs_chdirat (fd_t dirfd, const char *path) |
Change the current working directory. | |
ssize_t | vfs_getcwd (char *buf, size_t size) |
Get the current working directory. | |
long | vfs_fchmodat (fd_t fd, const char *path, int perm, int flags) |
Change the permissions of a file. | |
long | vfs_unlinkat (fd_t dirfd, const char *path) |
Remove the name of a file, and possibly the file itself. | |
long | vfs_fsync (io_t *io, bool sync_metadata, off_t start, off_t end) |
Synchronize a file with the filesystem. | |
static bool | vfs_sysfs_filesystems (sysfs_file_t *f) |
static bool | vfs_sysfs_mountpoints (sysfs_file_t *f) |
static void | vfs_sysfs_dentry_stats_stat_receiver (int depth, const dentry_t *dentry, bool mountroot, void *data) |
static bool | vfs_sysfs_dentry_stats (sysfs_file_t *f) |
SYSFS_AUTOREGISTER (vfs, vfs_sysfs_items) | |
Variables | |
static list_head | vfs_fs_list = LIST_HEAD_INIT(vfs_fs_list) |
static spinlock_t | vfs_fs_list_lock = SPINLOCK_INIT |
dentry_t * | root_dentry = NULL |
slab_t * | superblock_cache = NULL |
slab_t * | mount_cache = NULL |
slab_t * | file_cache = NULL |
static const io_op_t | file_io_ops |
static const io_op_t | dir_io_ops |
static sysfs_item_t | vfs_sysfs_items [] |
SLAB_AUTOINIT | ( | "superblock" | , |
superblock_cache | , | ||
superblock_t | ) |
SLAB_AUTOINIT | ( | "mount" | , |
mount_cache | , | ||
mount_t | ) |
SLAB_AUTOINIT | ( | "file" | , |
file_cache | , | ||
file_t | ) |
Definition at line 44 of file vfs.c.
Referenced by vfs_fsync(), and vfs_io_ops_close().
|
static |
Definition at line 59 of file vfs.c.
Referenced by vfs_fsync(), and vfs_io_ops_close().
Definition at line 69 of file vfs.c.
Referenced by vfs_io_ops_close_dir().
|
static |
|
static |
Definition at line 186 of file vfs.c.
Referenced by vfs_io_ops_mmap().
MOS_INIT | ( | KTHREAD | , |
vfs_flusher_init | ) |
|
static |
Definition at line 301 of file vfs.c.
Referenced by vfs_fstatat().
|
static |
Definition at line 318 of file vfs.c.
Referenced by vfs_mount(), and vfs_register_filesystem().
|
static |
Definition at line 334 of file vfs.c.
Referenced by vfs_do_open().
|
static |
Definition at line 351 of file vfs.c.
Referenced by vfs_openat().
|
static |
|
static |
|
static |
Definition at line 877 of file vfs.c.
Referenced by vfs_sysfs_dentry_stats().
|
static |
SYSFS_AUTOREGISTER | ( | vfs | , |
vfs_sysfs_items | ) |
|
static |
Definition at line 33 of file vfs.c.
Referenced by vfs_find_filesystem(), vfs_register_filesystem(), and vfs_sysfs_filesystems().
|
static |
Definition at line 34 of file vfs.c.
Referenced by vfs_find_filesystem(), and vfs_register_filesystem().
Definition at line 38 of file vfs.c.
Referenced by cpio_mount(), MOS_INIT(), and userfs_fsop_mount().
Definition at line 38 of file vfs.c.
Referenced by dentry_mount().
Definition at line 38 of file vfs.c.
Referenced by vfs_do_open_dentry().
|
static |
Definition at line 267 of file vfs.c.
Referenced by vfs_do_open_dentry().
|
static |
Definition at line 277 of file vfs.c.
Referenced by vfs_do_open_dentry().
|
static |