syscalls: fix more deadlocks and issues

This commit is contained in:
Matheus
2024-08-26 22:40:06 -03:00
parent 42bda0bf92
commit 0236ad663f
3 changed files with 6 additions and 1 deletions
+2
View File
@@ -33,6 +33,8 @@ syscallret_t syscall_chdir(context_t *, char *upath) {
if (ret.errno)
goto cleanup;
VOP_UNLOCK(new);
if (new->type != V_TYPE_DIR) {
ret.errno = ENOTDIR;
goto cleanup;
+3
View File
@@ -78,8 +78,11 @@ syscallret_t syscall_mount(context_t *context, char *ubacking, char *umountpoint
ret.errno = vfs_lookup(&backingnode, backingrefnode, backing, NULL, 0);
if (ret.errno)
goto cleanup;
VOP_UNLOCK(backingnode);
}
ret.errno = vfs_mount(backingnode, mountpointrefnode, mountpoint, fs, data);
if (ubacking) {
VOP_RELEASE(backingnode);
+1 -1
View File
@@ -60,7 +60,7 @@ syscallret_t syscall_renameat(context_t *context, int olddirfd, char *uoldpath,
if (oldcomponent == NULL && newcomponent == NULL)
goto cleanup;
// TODO possibly deadlocks
// TODO deadlocks.
ret.errno = vfs_lookup(&sourcedirnode, olddirnode, oldpath, oldcomponent, VFS_LOOKUP_NOLINK | VFS_LOOKUP_PARENT);
if (ret.errno)
goto cleanup;