From 5874fd640e2a81a7bd3bf41538b6406a3b6e5977 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 18 Jul 2025 19:06:37 +0300 Subject: [PATCH] Kernel: Fix TmpFS for 32 bit target There was a problem when sizeof(size_t) != sizeof(PageInfo) --- kernel/include/kernel/FS/TmpFS/Definitions.h | 6 +++--- kernel/kernel/FS/TmpFS/FileSystem.cpp | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/kernel/include/kernel/FS/TmpFS/Definitions.h b/kernel/include/kernel/FS/TmpFS/Definitions.h index 801fda6e..1a885c1e 100644 --- a/kernel/include/kernel/FS/TmpFS/Definitions.h +++ b/kernel/include/kernel/FS/TmpFS/Definitions.h @@ -28,7 +28,7 @@ namespace Kernel // 1x singly indirect // 1x doubly indirect // 1x triply indirect - BAN::Array block; + BAN::Array block; static constexpr size_t direct_block_count = 2; #elif ARCH(i686) uint32_t __padding; @@ -36,8 +36,8 @@ namespace Kernel // 1x singly indirect // 1x doubly indirect // 1x triply indirect - BAN::Array block; - static constexpr size_t direct_block_count = 5; + BAN::Array block; + static constexpr size_t direct_block_count = 13; #else #error #endif diff --git a/kernel/kernel/FS/TmpFS/FileSystem.cpp b/kernel/kernel/FS/TmpFS/FileSystem.cpp index 32ab0f1e..fea7ed8f 100644 --- a/kernel/kernel/FS/TmpFS/FileSystem.cpp +++ b/kernel/kernel/FS/TmpFS/FileSystem.cpp @@ -284,7 +284,9 @@ namespace Kernel paddr_t page_to_free; PageTable::with_fast_page(layer1_page.paddr(), [&] { - auto& allocated_pages = PageTable::fast_page_as_sized(page_infos_per_page - 1); + static_assert(sizeof(size_t) <= sizeof(PageInfo)); + + auto& allocated_pages = PageTable::fast_page_as(PAGE_SIZE - sizeof(size_t)); ASSERT(allocated_pages > 0); allocated_pages--; @@ -405,8 +407,9 @@ namespace Kernel PageTable::with_fast_page(layer1_page.paddr(), [&] { constexpr size_t pages_per_block = page_infos_per_page - 1; + static_assert(sizeof(size_t) <= sizeof(PageInfo)); - auto& allocated_pages = PageTable::fast_page_as_sized(pages_per_block); + auto& allocated_pages = PageTable::fast_page_as(PAGE_SIZE - sizeof(size_t)); if (allocated_pages == pages_per_block) return;