aboutsummaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-14 03:19:46 +0000
committersotech117 <michael_foiani@brown.edu>2024-05-14 03:19:46 +0000
commit06d50155ac0bd079bfca0f5728346d8beeb205f2 (patch)
tree2f20c8ba099304d6ea06fb76e8a0807b8afa5a5f /kernel/fs
parent7585cb5ad84babe9db8c6595de464e33fb878f0c (diff)
weenix fixes
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/namev.c2
-rw-r--r--kernel/fs/s5fs/s5fs.c2
-rw-r--r--kernel/fs/s5fs/s5fs_subr.c6
-rw-r--r--kernel/fs/vfs_syscall.c7
-rw-r--r--kernel/fs/vnode_specials.c2
5 files changed, 12 insertions, 7 deletions
diff --git a/kernel/fs/namev.c b/kernel/fs/namev.c
index 8e355d6..f443b2e 100644
--- a/kernel/fs/namev.c
+++ b/kernel/fs/namev.c
@@ -76,7 +76,7 @@ long namev_is_descendant(vnode_t *a, vnode_t *b)
long namev_lookup(vnode_t *dir, const char *name, size_t namelen,
vnode_t **res_vnode)
{
- // // NOT_YET_IMPLEMENTED("VFS: namev_lookup");
+ // NOT_YET_IMPLEMENTED("VFS: namev_lookup");
// KASSERT(NULL != dir);
// KASSERT(NULL != name);
diff --git a/kernel/fs/s5fs/s5fs.c b/kernel/fs/s5fs/s5fs.c
index 8fdfc7b..c40c6ff 100644
--- a/kernel/fs/s5fs/s5fs.c
+++ b/kernel/fs/s5fs/s5fs.c
@@ -307,7 +307,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), 1, &pf);
- // // Check if the page frame was not found
+ // Check if the page frame was not found
// if (err < 0)
// {
// return;
diff --git a/kernel/fs/s5fs/s5fs_subr.c b/kernel/fs/s5fs/s5fs_subr.c
index 6e89249..f092d0a 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;
}
diff --git a/kernel/fs/vfs_syscall.c b/kernel/fs/vfs_syscall.c
index 245e55d..fc0878e 100644
--- a/kernel/fs/vfs_syscall.c
+++ b/kernel/fs/vfs_syscall.c
@@ -569,6 +569,10 @@ long do_link(const char *oldpath, const char *newpath)
// NOT_YET_IMPLEMENTED("VFS: do_link");
// Resolve the oldpath
+ if (strlen(newpath) > NAME_LEN)
+ {
+ return -ENAMETOOLONG;
+ }
vnode_t *old_vnode = NULL;
long ret = namev_resolve(NULL, oldpath, &old_vnode);
@@ -599,6 +603,7 @@ long do_link(const char *oldpath, const char *newpath)
if (!S_ISDIR(dir->vn_mode))
{
vput(&old_vnode);
+ vput(&dir);
return -ENOTDIR;
}
// Check if name is too long
@@ -610,7 +615,7 @@ long do_link(const char *oldpath, const char *newpath)
// Lock the vnodes and call link
vlock_in_order(old_vnode, dir);
- ret = dir->vn_ops->link(old_vnode, dir, name, len);
+ ret = dir->vn_ops->link(dir, name, len, old_vnode);
vunlock_in_order(old_vnode, dir);
vput(&old_vnode);
diff --git a/kernel/fs/vnode_specials.c b/kernel/fs/vnode_specials.c
index d8c79bd..41d4ce2 100644
--- a/kernel/fs/vnode_specials.c
+++ b/kernel/fs/vnode_specials.c
@@ -224,4 +224,4 @@ static long blockdev_file_fill_pframe(vnode_t *file, pframe_t *pf)
static long blockdev_file_flush_pframe(vnode_t *file, pframe_t *pf)
{
return -ENOTSUP;
-}
+} \ No newline at end of file