diff --git a/kernel-src/sys/syscalls/chdir.c b/kernel-src/sys/syscalls/chdir.c index 99717999..6170f026 100644 --- a/kernel-src/sys/syscalls/chdir.c +++ b/kernel-src/sys/syscalls/chdir.c @@ -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; diff --git a/kernel-src/sys/syscalls/mount.c b/kernel-src/sys/syscalls/mount.c index a5b0f61b..b720e8b1 100644 --- a/kernel-src/sys/syscalls/mount.c +++ b/kernel-src/sys/syscalls/mount.c @@ -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); diff --git a/kernel-src/sys/syscalls/renameat.c b/kernel-src/sys/syscalls/renameat.c index 7f6c6736..8339d6c2 100644 --- a/kernel-src/sys/syscalls/renameat.c +++ b/kernel-src/sys/syscalls/renameat.c @@ -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;