浏览代码

Kernel: Mark sys$fcntl as not needing the big lock

This syscall operates on the file descriptor table, and on individual
open file descriptions. Both of those are already protected by scoped
locking mechanisms.
Andreas Kling 2 年之前
父节点
当前提交
775e6d6865
共有 2 个文件被更改,包括 2 次插入2 次删除
  1. 1 1
      Kernel/API/Syscall.h
  2. 1 1
      Kernel/Syscalls/fcntl.cpp

+ 1 - 1
Kernel/API/Syscall.h

@@ -77,7 +77,7 @@ enum class NeedsBigProcessLock {
     S(fchdir, NeedsBigProcessLock::No)                      \
     S(fchdir, NeedsBigProcessLock::No)                      \
     S(fchmod, NeedsBigProcessLock::No)                      \
     S(fchmod, NeedsBigProcessLock::No)                      \
     S(fchown, NeedsBigProcessLock::No)                      \
     S(fchown, NeedsBigProcessLock::No)                      \
-    S(fcntl, NeedsBigProcessLock::Yes)                      \
+    S(fcntl, NeedsBigProcessLock::No)                       \
     S(fork, NeedsBigProcessLock::Yes)                       \
     S(fork, NeedsBigProcessLock::Yes)                       \
     S(fstat, NeedsBigProcessLock::No)                       \
     S(fstat, NeedsBigProcessLock::No)                       \
     S(fstatvfs, NeedsBigProcessLock::No)                    \
     S(fstatvfs, NeedsBigProcessLock::No)                    \

+ 1 - 1
Kernel/Syscalls/fcntl.cpp

@@ -12,7 +12,7 @@ namespace Kernel {
 
 
 ErrorOr<FlatPtr> Process::sys$fcntl(int fd, int cmd, uintptr_t arg)
 ErrorOr<FlatPtr> Process::sys$fcntl(int fd, int cmd, uintptr_t arg)
 {
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     TRY(require_promise(Pledge::stdio));
     TRY(require_promise(Pledge::stdio));
     dbgln_if(IO_DEBUG, "sys$fcntl: fd={}, cmd={}, arg={}", fd, cmd, arg);
     dbgln_if(IO_DEBUG, "sys$fcntl: fd={}, cmd={}, arg={}", fd, cmd, arg);
     auto description = TRY(open_file_description(fd));
     auto description = TRY(open_file_description(fd));