From d6e60839e927276dd5671e64bc3df61a8b7ae8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 4 Apr 2008 19:32:39 +0000 Subject: [PATCH] * Resolved a TODO: determine the log size depending on the size of the volume. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24797 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/Volume.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.cpp b/src/add-ons/kernel/file_systems/bfs/Volume.cpp index 3b5fe2298e..51e4f169e6 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Volume.cpp @@ -654,12 +654,18 @@ Volume::Initialize(int fd, const char *name, uint32 blockSize, fBlockShift = fSuperBlock.BlockShift(); fAllocationGroupShift = fSuperBlock.AllocationGroupShift(); + // determine log size depending on the size of the volume + off_t logSize = 2048; + if (numBlocks <= 20480) + logSize = 512; + if (deviceSize > 1LL * 1024 * 1024 * 1024) + logSize = 4096; + // since the allocator has not been initialized yet, we // cannot use BlockAllocator::BitmapSize() here fSuperBlock.log_blocks = ToBlockRun(AllocationGroups() * fSuperBlock.BlocksPerAllocationGroup() + 1); - fSuperBlock.log_blocks.length = HOST_ENDIAN_TO_BFS_INT16(2048); - // ToDo: set the log size depending on the disk size + fSuperBlock.log_blocks.length = HOST_ENDIAN_TO_BFS_INT16(logSize); fSuperBlock.log_start = fSuperBlock.log_end = HOST_ENDIAN_TO_BFS_INT64( ToBlock(Log()));