From: Tulio A M Mendes Date: Sat, 14 Feb 2026 01:33:58 +0000 (-0300) Subject: refactor: migrate diskfs to inode_operations X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=cc5b278349e96c4a7c3de68d86f5dd960e99b23c;p=AdrOS.git refactor: migrate diskfs to inode_operations - diskfs_dir_iops: lookup, readdir, create, mkdir, unlink, rmdir, rename, link (moved from diskfs_dir_fops) - diskfs_file_iops: truncate (moved from diskfs_file_fops) - diskfs_dir_fops: only close remains - diskfs_file_fops: only read, write, close remain - All node creation sites wire both f_ops and i_ops 20/20 smoke tests pass. --- diff --git a/src/kernel/diskfs.c b/src/kernel/diskfs.c index 776a2fa5..26cafef8 100644 --- a/src/kernel/diskfs.c +++ b/src/kernel/diskfs.c @@ -482,12 +482,18 @@ static const struct file_operations diskfs_file_fops = { .read = diskfs_read_impl, .write = diskfs_write_impl, .close = diskfs_close_impl, +}; + +static const struct inode_operations diskfs_file_iops = { .truncate = diskfs_vfs_truncate, }; static const struct file_operations diskfs_dir_fops = { .close = diskfs_close_impl, - .finddir = diskfs_root_finddir, +}; + +static const struct inode_operations diskfs_dir_iops = { + .lookup = diskfs_root_finddir, .readdir = diskfs_readdir_impl, .create = diskfs_vfs_create, .mkdir = diskfs_vfs_mkdir, @@ -526,10 +532,12 @@ static struct fs_node* diskfs_root_finddir(struct fs_node* node, const char* nam dn->vfs.flags = FS_DIRECTORY; dn->vfs.length = 0; dn->vfs.f_ops = &diskfs_dir_fops; + dn->vfs.i_ops = &diskfs_dir_iops; } else { dn->vfs.flags = FS_FILE; dn->vfs.length = sb.inodes[cino].size_bytes; dn->vfs.f_ops = &diskfs_file_fops; + dn->vfs.i_ops = &diskfs_file_iops; } return &dn->vfs; @@ -584,6 +592,7 @@ int diskfs_open_file(const char* rel_path, uint32_t flags, fs_node_t** out_node) dn->vfs.inode = 100 + (uint32_t)ino; dn->vfs.length = sb.inodes[ino].size_bytes; dn->vfs.f_ops = &diskfs_file_fops; + dn->vfs.i_ops = &diskfs_file_iops; dn->ino = ino; *out_node = &dn->vfs; @@ -869,6 +878,7 @@ static int diskfs_vfs_create(struct fs_node* dir, const char* name, uint32_t fla dn->vfs.inode = 100 + (uint32_t)ino; dn->vfs.length = sb.inodes[ino].size_bytes; dn->vfs.f_ops = &diskfs_file_fops; + dn->vfs.i_ops = &diskfs_file_iops; dn->ino = ino; *out = &dn->vfs; return 0; @@ -890,6 +900,7 @@ static int diskfs_vfs_create(struct fs_node* dir, const char* name, uint32_t fla dn->vfs.inode = 100 + (uint32_t)new_ino; dn->vfs.length = 0; dn->vfs.f_ops = &diskfs_file_fops; + dn->vfs.i_ops = &diskfs_file_iops; dn->ino = new_ino; *out = &dn->vfs; return 0; @@ -1077,6 +1088,7 @@ fs_node_t* diskfs_create_root(int drive) { g_root.vfs.inode = 100; g_root.vfs.length = 0; g_root.vfs.f_ops = &diskfs_dir_fops; + g_root.vfs.i_ops = &diskfs_dir_iops; g_root.ino = 0; if (g_ready) {