blob: 99d6374c2f1807f36272b698b60d80a608944ccc [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/inspector/loader.h"
#include <zircon/assert.h>
namespace minfs {
zx_status_t Loader::LoadSuperblock(uint64_t dev_offset, storage::BlockBuffer* buffer) const {
return RunReadOperation(buffer, 0, dev_offset, 1);
}
zx_status_t Loader::LoadInodeBitmap(const Superblock& superblock,
storage::BlockBuffer* buffer) const {
return RunReadOperation(buffer, 0, superblock.ibm_block, InodeBitmapBlocks(superblock));
}
zx_status_t Loader::LoadInodeTable(const Superblock& superblock,
storage::BlockBuffer* buffer) const {
return RunReadOperation(buffer, 0, superblock.ino_block, InodeBlocks(superblock));
}
zx_status_t Loader::LoadJournal(const Superblock& superblock, storage::BlockBuffer* buffer) const {
return RunReadOperation(buffer, 0, JournalStartBlock(superblock), JournalBlocks(superblock));
}
zx_status_t Loader::RunReadOperation(storage::BlockBuffer* buffer, uint64_t vmo_offset,
uint64_t dev_offset, uint64_t length) const {
ZX_ASSERT(buffer->capacity() - vmo_offset >= length);
storage::Operation operation{
.type = storage::OperationType::kRead,
.vmo_offset = vmo_offset,
.dev_offset = dev_offset,
.length = length,
};
return handler_->RunOperation(operation, buffer);
}
zx_status_t Loader::RunWriteOperation(storage::BlockBuffer* buffer, uint64_t vmo_offset,
uint64_t dev_offset, uint64_t length) const {
ZX_ASSERT(buffer->capacity() - vmo_offset >= length);
storage::Operation operation{
.type = storage::OperationType::kWrite,
.vmo_offset = vmo_offset,
.dev_offset = dev_offset,
.length = length,
};
return handler_->RunOperation(operation, buffer);
}
} // namespace minfs