aboutsummaryrefslogtreecommitdiff
path: root/kernel/fs/s5fs/s5fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fs/s5fs/s5fs.c')
-rw-r--r--kernel/fs/s5fs/s5fs.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/kernel/fs/s5fs/s5fs.c b/kernel/fs/s5fs/s5fs.c
index 2bcec7d..819b106 100644
--- a/kernel/fs/s5fs/s5fs.c
+++ b/kernel/fs/s5fs/s5fs.c
@@ -221,9 +221,15 @@ static void s5fs_read_vnode(fs_t *fs, vnode_t *vn)
// Update linkcount
s5_inode->s5_linkcount++;
- // Get the inode from the disk
+ // Get the page frame for the inode
pframe_t *pf;
- s5_get_file_disk_block(vn, S5_INODE_BLOCK(vn->vn_vno), S5_INODE_OFFSET(vn->vn_vno), 0, &pf);
+ long err = s5fs_get_pframe(vn, &vn->vn_mobj, 0, &pf);
+ // Check if the page frame was not found
+ if (err < 0)
+ {
+ return;
+ }
+ // Copy the inode from the page frame
memcpy(s5_inode, pf->pf_addr, sizeof(s5_inode_t));
// Release the disk block
@@ -300,7 +306,13 @@ static void s5fs_delete_vnode(fs_t *fs, vnode_t *vn)
{
// Write the inode back to disk and return
pframe_t *pf;
- s5_get_file_disk_block(vn, S5_INODE_BLOCK(vn->vn_vno), S5_INODE_OFFSET(vn->vn_vno), 1, &pf);
+ long err = s5fs_get_pframe(vn, &vn->vn_mobj, 1, &pf);
+ // Check if the page frame was not found
+ if (err < 0)
+ {
+ return;
+ }
+ // Copy the inode to the page frame
memcpy(pf->pf_addr, s5_inode, sizeof(s5_inode_t));
s5_release_disk_block(&pf);
return;