| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #pragma once |
| 4 | |
| 5 | #include "mos/filesystem/vfs_types.hpp" |
| 6 | |
| 7 | void inode_init(inode_t *inode, superblock_t *sb, u64 ino, file_type_t type); |
| 8 | inode_t *inode_create(superblock_t *sb, u64 ino, file_type_t type); |
| 9 | |
| 10 | /** |
| 11 | * @brief Create a new dentry with the given name and parent |
| 12 | * |
| 13 | * @param sb The superblock of the dentry |
| 14 | * @param parent The parent dentry |
| 15 | * @param name The name of the dentry |
| 16 | * |
| 17 | * @return The new dentry, or NULL if the dentry could not be created |
| 18 | * @note The returned dentry will have its reference count of 0. |
| 19 | */ |
| 20 | dentry_t *dentry_get_from_parent(superblock_t *sb, dentry_t *parent, mos::string_view name = "" ); |
| 21 | |
| 22 | ssize_t vfs_generic_read(const FsBaseFile *file, void *buf, size_t size, off_t offset); |
| 23 | ssize_t vfs_generic_write(const FsBaseFile *file, const void *buf, size_t size, off_t offset); |
| 24 | ssize_t vfs_generic_lseek(const FsBaseFile *file, off_t offset, int whence); |
| 25 | int vfs_generic_close(const FsBaseFile *file); |
| 26 | |
| 27 | // ! simple page cache functions |
| 28 | phyframe_t *simple_fill_cache(inode_cache_t *cache, off_t pgoff); |
| 29 | bool simple_page_write_begin(inode_cache_t *icache, off_t offset, size_t size, phyframe_t **page, void **private_); |
| 30 | void simple_page_write_end(inode_cache_t *icache, off_t offset, size_t size, phyframe_t *page, void *private_); |
| 31 | long simple_flush_page_discard_data(inode_cache_t *icache, off_t pgoff, phyframe_t *page); |
| 32 | |
| 33 | // ! simple in-memory directory iterator |
| 34 | void vfs_generic_iterate_dir(const dentry_t *dir, vfs_listdir_state_t *state, dentry_iterator_op op); |
| 35 | |