From c02707824b77d16f13bcebb128a092d4569610d5 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 17 Oct 2025 15:50:51 -0400 Subject: [PATCH] kernel/fs: Add some more lock assertions. --- src/system/kernel/fs/EntryCache.cpp | 3 +++ src/system/kernel/fs/fd.cpp | 8 ++++++++ src/system/kernel/fs/vfs.cpp | 1 + 3 files changed, 12 insertions(+) diff --git a/src/system/kernel/fs/EntryCache.cpp b/src/system/kernel/fs/EntryCache.cpp index 6e6da27b4f..6d263dc01e 100644 --- a/src/system/kernel/fs/EntryCache.cpp +++ b/src/system/kernel/fs/EntryCache.cpp @@ -78,6 +78,9 @@ EntryCache::~EntryCache() status_t EntryCache::Init() { + WriteLocker locker(fLock); + ASSERT(fGenerationCount == 0); + status_t error = fEntries.Init(); if (error != B_OK) return error; diff --git a/src/system/kernel/fs/fd.cpp b/src/system/kernel/fs/fd.cpp index 94d81d1485..6590b4ed35 100644 --- a/src/system/kernel/fs/fd.cpp +++ b/src/system/kernel/fs/fd.cpp @@ -95,6 +95,8 @@ alloc_fd(void) bool fd_close_on_exec(const struct io_context* context, int fd) { + ASSERT_READ_LOCKED_RW_LOCK(&context->lock); + return CHECK_BIT(context->fds_close_on_exec[fd / 8], fd & 7) ? true : false; } @@ -102,6 +104,8 @@ fd_close_on_exec(const struct io_context* context, int fd) void fd_set_close_on_exec(struct io_context* context, int fd, bool closeFD) { + ASSERT_WRITE_LOCKED_RW_LOCK(&context->lock); + if (closeFD) context->fds_close_on_exec[fd / 8] |= (1 << (fd & 7)); else @@ -112,6 +116,8 @@ fd_set_close_on_exec(struct io_context* context, int fd, bool closeFD) bool fd_close_on_fork(const struct io_context* context, int fd) { + ASSERT_READ_LOCKED_RW_LOCK(&context->lock); + return CHECK_BIT(context->fds_close_on_fork[fd / 8], fd & 7) ? true : false; } @@ -119,6 +125,8 @@ fd_close_on_fork(const struct io_context* context, int fd) void fd_set_close_on_fork(struct io_context* context, int fd, bool closeFD) { + ASSERT_WRITE_LOCKED_RW_LOCK(&context->lock); + if (closeFD) context->fds_close_on_fork[fd / 8] |= (1 << (fd & 7)); else diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index ad8b522bce..f4d2eef818 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -4994,6 +4994,7 @@ vfs_new_io_context(const io_context* parentContext, bool purgeCloseOnExec) context->ref_count = 1; rw_lock_init(&context->lock, "I/O context"); + WriteLocker contextLocker(context->lock); ReadLocker parentLocker; size_t tableSize;