blob: 5ad8a0c3ee694d0a8adbf2fba31d8d445617120b [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/storage/minfs/allocator/metadata.h"
#include <utility>
namespace minfs {
uint32_t AllocatorFvmMetadata::UnitsPerSlices(uint32_t slices, uint32_t unit_size) const {
uint64_t units = (SliceSize() * slices) / unit_size;
ZX_DEBUG_ASSERT(units <= std::numeric_limits<uint32_t>::max());
return static_cast<uint32_t>(units);
}
// NOTE: This helper is only intended to be called for
// values of |blocks| which are known to be convertible to slices
// without loss. This is checked by a runtime assertion.
uint32_t AllocatorFvmMetadata::BlocksToSlices(uint32_t blocks) const {
const size_t kBlocksPerSlice = SliceSize() / superblock_->BlockSize();
uint32_t slices = static_cast<uint32_t>(blocks / kBlocksPerSlice);
ZX_DEBUG_ASSERT(UnitsPerSlices(slices, superblock_->BlockSize()) == blocks);
return slices;
}
AllocatorMetadata::AllocatorMetadata(blk_t data_start_block, blk_t metadata_start_block,
bool using_fvm, AllocatorFvmMetadata fvm,
SuperblockManager* superblock,
SuperblockAllocatorAccess access)
: data_start_block_(data_start_block),
metadata_start_block_(metadata_start_block),
using_fvm_(using_fvm),
fvm_(std::move(fvm)),
superblock_(superblock),
superblock_access_(access) {}
} // namespace minfs