aboutsummaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-13 12:10:55 +0000
committersotech117 <michael_foiani@brown.edu>2024-05-13 12:10:55 +0000
commit7585cb5ad84babe9db8c6595de464e33fb878f0c (patch)
tree3acdd29920420ca341ea7e3f90d60b16c384ce51 /kernel/fs
parentf09878f6327426631d9419d825a4e8396e3b9dc4 (diff)
s5 fixes and issues with weenix
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/s5fs/s5fs.c16
-rw-r--r--kernel/fs/s5fs/s5fs_subr.c6
2 files changed, 11 insertions, 11 deletions
diff --git a/kernel/fs/s5fs/s5fs.c b/kernel/fs/s5fs/s5fs.c
index ba406e7..8fdfc7b 100644
--- a/kernel/fs/s5fs/s5fs.c
+++ b/kernel/fs/s5fs/s5fs.c
@@ -306,7 +306,7 @@ static void s5fs_delete_vnode(fs_t *fs, vnode_t *vn)
{
// Write the inode back to disk and return
pframe_t *pf;
- s5_get_meta_disk_block(FS_TO_S5FS(fs), S5_INODE_BLOCK(vn->vn_vno), 0, &pf);
+ s5_get_meta_disk_block(FS_TO_S5FS(fs), S5_INODE_BLOCK(vn->vn_vno), 1, &pf);
// // Check if the page frame was not found
// if (err < 0)
// {
@@ -481,7 +481,7 @@ static long s5fs_mknod(struct vnode *dir, const char *name, size_t namelen,
}
// Link the new inode/vnode to the parent directory
- long link = s5_link(dir, name, namelen, VNODE_TO_S5NODE(new_vnode));
+ long link = s5_link(VNODE_TO_S5NODE(dir), name, namelen, VNODE_TO_S5NODE(new_vnode));
// Check if the link operation failed
if (link < 0)
{
@@ -700,7 +700,7 @@ static long s5fs_rename(vnode_t *olddir, const char *oldname, size_t oldnamelen,
}
// Remove the old directory entry
- s5_remove_dirent(s5_node, oldname, oldnamelen, filepos);
+ s5_remove_dirent(s5_node, oldname, oldnamelen, VNODE_TO_S5NODE(olddir));
// Check if this failed (TODO: ask in hours)
return link;
@@ -741,7 +741,7 @@ static long s5fs_rename(vnode_t *olddir, const char *oldname, size_t oldnamelen,
}
// Remove the old directory entry
- s5_remove_dirent(s5_node, oldname, oldnamelen, filepos);
+ s5_remove_dirent(s5_node, oldname, oldnamelen, VNODE_TO_S5NODE(olddir));
vput_locked(&child);
vput_locked(&new_child);
@@ -819,7 +819,7 @@ static long s5fs_mkdir(vnode_t *dir, const char *name, size_t namelen,
// Check if the link operation failed
if (link2 < 0)
{
- s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), ".", 1, 0);
+ s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), ".", 1, VNODE_TO_S5FS(dir));
vput(new_vnode);
s5_free_inode(s5fs, inode_num);
return link2;
@@ -835,8 +835,8 @@ static long s5fs_mkdir(vnode_t *dir, const char *name, size_t namelen,
// Check if the link operation failed
if (link3 < 0)
{
- s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), ".", 1, 0);
- s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), "..", 2, 0);
+ s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), ".", 1, VNODE_TO_S5FS(dir));
+ s5_remove_dirent(VNODE_TO_S5NODE(new_vnode), "..", 2, VNODE_TO_S5FS(dir));
vput(new_vnode);
s5_free_inode(s5fs, inode_num);
return link3;
@@ -973,7 +973,7 @@ static long s5fs_stat(vnode_t *vnode, stat_t *ss)
s5_inode_t *s5_inode = &VNODE_TO_S5NODE(vnode)->inode;
// Initialize the stat struct
- ss->st_blocks = s5_inode_blocks(vnode);
+ ss->st_blocks = s5_inode_blocks(VNODE_TO_S5NODE(vnode));
ss->st_mode = vnode->vn_mode;
ss->st_rdev = vnode->vn_devid;
ss->st_ino = s5_inode->s5_number;
diff --git a/kernel/fs/s5fs/s5fs_subr.c b/kernel/fs/s5fs/s5fs_subr.c
index f092d0a..6e89249 100644
--- a/kernel/fs/s5fs/s5fs_subr.c
+++ b/kernel/fs/s5fs/s5fs_subr.c
@@ -242,7 +242,7 @@ long s5_file_block_to_disk_block(s5_node_t *sn, size_t file_blocknum,
}
// Update the inode
indirect_block[indirect_block_index] = alloced_blocknum;
- sn->dirtied_inode = 1;
+ // sn->dirtied_inode = 1;
// set ret params and return
*newp = 1;
@@ -408,8 +408,8 @@ ssize_t s5_write_file(s5_node_t *sn, size_t pos, const char *buf, size_t len)
if (err < 0)
{
// Restore pos
- sn->vnode.vn_len += bytes_written;
- sn->inode.s5_un.s5_size += bytes_written;
+ sn->vnode.vn_len -= bytes_written;
+ sn->inode.s5_un.s5_size -= bytes_written;
return err;
}