PatchworkOS
Loading...
Searching...
No Matches
ramfs.c File Reference
#include <kernel/fs/ramfs.h>
#include <kernel/fs/dentry.h>
#include <kernel/fs/mount.h>
#include <kernel/fs/namespace.h>
#include <kernel/fs/path.h>
#include <kernel/fs/sysfs.h>
#include <kernel/fs/vfs.h>
#include <kernel/log/log.h>
#include <kernel/log/panic.h>
#include <kernel/sync/lock.h>
#include <kernel/sync/mutex.h>
#include <kernel/utils/ref.h>
#include <boot/boot_info.h>
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/list.h>
#include <sys/math.h>

Go to the source code of this file.

Functions

static _Atomic (inode_number_t)
 
static void ramfs_dentry_deinit (dentry_t *dentry)
 
static uint64_t ramfs_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t ramfs_write (file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t ramfs_lookup (inode_t *dir, dentry_t *target)
 
static uint64_t ramfs_create (inode_t *dir, dentry_t *target, path_flags_t flags)
 
static void ramfs_truncate (inode_t *inode)
 
static uint64_t ramfs_link (dentry_t *old, inode_t *dir, dentry_t *target)
 
static uint64_t ramfs_remove_file (inode_t *parent, dentry_t *target)
 
static uint64_t ramfs_remove_directory (inode_t *parent, dentry_t *target)
 
static uint64_t ramfs_remove (inode_t *parent, dentry_t *target, path_flags_t flags)
 
static void ramfs_inode_cleanup (inode_t *inode)
 
static void ramfs_superblock_cleanup (superblock_t *superblock)
 
static dentry_tramfs_load_file (superblock_t *superblock, dentry_t *parent, const char *name, const boot_file_t *in)
 
static dentry_tramfs_load_dir (superblock_t *superblock, dentry_t *parent, const char *name, const boot_dir_t *in)
 
static dentry_tramfs_mount (filesystem_t *fs, const char *devName, void *private)
 
static inode_tramfs_inode_new (superblock_t *superblock, inode_type_t type, void *buffer, uint64_t size)
 
void ramfs_init (const boot_disk_t *disk)
 Registers the ramfs filesystem and mounts it as the root filesystem.
 

Variables

static mount_tmount = NULL
 
static file_ops_t fileOps
 
static inode_ops_t inodeOps
 
static dentry_ops_t dentryOps
 
static superblock_ops_t superOps
 
static filesystem_t ramfs
 

Function Documentation

◆ _Atomic()

static _Atomic ( inode_number_t  )
staticnew

Definition at line 26 of file ramfs.c.

◆ ramfs_create()

static uint64_t ramfs_create ( inode_t dir,
dentry_t target,
path_flags_t  flags 
)
static

◆ ramfs_dentry_deinit()

◆ ramfs_inode_cleanup()

static void ramfs_inode_cleanup ( inode_t inode)
static

Definition at line 212 of file ramfs.c.

References free(), NULL, and inode_t::private.

◆ ramfs_inode_new()

static inode_t * ramfs_inode_new ( superblock_t superblock,
inode_type_t  type,
void *  buffer,
uint64_t  size 
)
static

◆ ramfs_link()

static uint64_t ramfs_link ( dentry_t old,
inode_t dir,
dentry_t target 
)
static

Definition at line 146 of file ramfs.c.

References dentry_make_positive(), ERR, dentry_t::inode, and inode_t::linkCount.

◆ ramfs_load_dir()

static dentry_t * ramfs_load_dir ( superblock_t superblock,
dentry_t parent,
const char *  name,
const boot_dir_t in 
)
static

◆ ramfs_load_file()

static dentry_t * ramfs_load_file ( superblock_t superblock,
dentry_t parent,
const char *  name,
const boot_file_t in 
)
static

◆ ramfs_lookup()

static uint64_t ramfs_lookup ( inode_t dir,
dentry_t target 
)
static

Definition at line 105 of file ramfs.c.

◆ ramfs_mount()

◆ ramfs_read()

static uint64_t ramfs_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

◆ ramfs_remove()

◆ ramfs_remove_directory()

static uint64_t ramfs_remove_directory ( inode_t parent,
dentry_t target 
)
static

Definition at line 170 of file ramfs.c.

References ramfs_dentry_deinit().

Referenced by ramfs_remove().

◆ ramfs_remove_file()

static uint64_t ramfs_remove_file ( inode_t parent,
dentry_t target 
)
static

Definition at line 161 of file ramfs.c.

References dentry_t::inode, inode_t::linkCount, and ramfs_dentry_deinit().

Referenced by ramfs_remove().

◆ ramfs_superblock_cleanup()

static void ramfs_superblock_cleanup ( superblock_t superblock)
static

Definition at line 233 of file ramfs.c.

References NULL, and panic().

◆ ramfs_truncate()

static void ramfs_truncate ( inode_t inode)
static

Definition at line 136 of file ramfs.c.

References free(), NULL, inode_t::private, and inode_t::size.

◆ ramfs_write()

static uint64_t ramfs_write ( file_t file,
const void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Variable Documentation

◆ dentryOps

dentry_ops_t dentryOps
static
Initial value:
= {
}
uint64_t dentry_generic_getdents(dentry_t *dentry, dirent_t *buffer, uint64_t count, uint64_t *offset, path_flags_t flags)
Helper function for a basic getdents.
Definition dentry.c:195

Definition at line 229 of file ramfs.c.

Referenced by ramfs_mount(), and superblock_new().

◆ fileOps

file_ops_t fileOps
static
Initial value:
= {
.read = ramfs_read,
.write = ramfs_write,
}
uint64_t file_generic_seek(file_t *file, int64_t offset, seek_origin_t origin)
Helper function for basic seeking.
Definition file.c:51
static uint64_t ramfs_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition ramfs.c:78
static uint64_t ramfs_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition ramfs.c:66

Definition at line 99 of file ramfs.c.

Referenced by inode_new(), ramfs_inode_new(), and sysfs_file_new().

◆ inodeOps

inode_ops_t inodeOps
static
Initial value:
= {
.lookup = ramfs_lookup,
.create = ramfs_create,
.truncate = ramfs_truncate,
.link = ramfs_link,
.remove = ramfs_remove,
.cleanup = ramfs_inode_cleanup,
}
static void ramfs_truncate(inode_t *inode)
Definition ramfs.c:136
static void ramfs_inode_cleanup(inode_t *inode)
Definition ramfs.c:212
static uint64_t ramfs_link(dentry_t *old, inode_t *dir, dentry_t *target)
Definition ramfs.c:146
static uint64_t ramfs_remove(inode_t *parent, dentry_t *target, path_flags_t flags)
Definition ramfs.c:178
static uint64_t ramfs_create(inode_t *dir, dentry_t *target, path_flags_t flags)
Definition ramfs.c:114
static uint64_t ramfs_lookup(inode_t *dir, dentry_t *target)
Definition ramfs.c:105

Definition at line 220 of file ramfs.c.

Referenced by ramfs_inode_new(), sysfs_dir_new(), and sysfs_file_new().

◆ mount

mount_t* mount = NULL
static

Definition at line 24 of file ramfs.c.

Referenced by ramfs_init().

◆ ramfs

filesystem_t ramfs
static
Initial value:
= {
.name = RAMFS_NAME,
.mount = ramfs_mount,
}
#define RAMFS_NAME
The name of the ramfs filesystem.
Definition ramfs.h:26
static dentry_t * ramfs_mount(filesystem_t *fs, const char *devName, void *private)
Definition ramfs.c:316

Definition at line 380 of file ramfs.c.

Referenced by ramfs_init().

◆ superOps

superblock_ops_t superOps
static
Initial value:
= {
}
static void ramfs_superblock_cleanup(superblock_t *superblock)
Definition ramfs.c:233

Definition at line 240 of file ramfs.c.

Referenced by ramfs_mount().