case, our rootfs will be something like ext2.
RamFS vs. TwiFS: Indeed, they are both fs that lives in RAM so
- there is no foundmentally differences. However, TwiFS is designed
+ there is no foundmental differences. However, TwiFS is designed
to be a 'virtual FIlesystem for KERnel space' (FIKER), so other
kernel sub-modules can just create node and attach their own
implementation of read/write, without brothering to create a
volatile static inode_t ino = 0;
extern const struct v_inode_ops ramfs_inode_ops;
+extern const struct v_file_ops ramfs_file_ops;
int
ramfs_readdir(struct v_file* file, struct dir_context* dctx)
llist_for_each(pos, n, &file->dnode->children, siblings)
{
if (i++ >= dctx->index) {
- dctx->read_complete_callback(
- dctx, pos->name.value, pos->name.len, 0);
+ dctx->read_complete_callback(dctx,
+ pos->name.value,
+ pos->name.len,
+ vfs_get_dtype(pos->inode->itype));
return 1;
}
}
{
inode->id = ino++;
inode->ops = &ramfs_inode_ops;
- inode->default_fops = &default_file_ops;
+ inode->default_fops = &ramfs_file_ops;
}
int
void
ramfs_init()
{
- struct filesystem* ramfs = fsm_new_fs("ramfs", 5);
+ struct filesystem* ramfs = fsm_new_fs("ramfs", -1);
ramfs->mount = ramfs_mount;
ramfs->unmount = ramfs_unmount;
default_inode_dirlookup,
.create = ramfs_create,
.open = default_inode_open,
- .rename = default_inode_rename };
\ No newline at end of file
+ .rename = default_inode_rename };
+
+const struct v_file_ops ramfs_file_ops = { .readdir = ramfs_readdir,
+ .close = default_file_close,
+ .read = default_file_read,
+ .read_page = default_file_read,
+ .write = default_file_write,
+ .write_page = default_file_write,
+ .seek = default_file_seek };
\ No newline at end of file