blob: c4d84f54a1781905201017c3e8209766684527b5 [file] [log] [blame]
// Copyright 2020 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/lib/vfs/cpp/journal/disk_struct.h"
#include <disk_inspector/type_utils.h>
namespace fs {
std::unique_ptr<disk_inspector::DiskStruct> GetJournalSuperblockStruct() {
static_assert(sizeof(JournalInfo) == 40);
std::unique_ptr<disk_inspector::DiskStruct> object =
disk_inspector::DiskStruct::Create("Journal Superblock", sizeof(JournalInfo));
ADD_FIELD(object, JournalInfo, magic);
ADD_FIELD(object, JournalInfo, start_block);
ADD_FIELD(object, JournalInfo, reserved);
ADD_FIELD(object, JournalInfo, timestamp);
ADD_FIELD(object, JournalInfo, checksum);
return object;
}
std::unique_ptr<disk_inspector::DiskStruct> GetJournalPrefixStruct() {
static_assert(offsetof(JournalPrefix, reserved) == 24);
std::unique_ptr<disk_inspector::DiskStruct> object =
disk_inspector::DiskStruct::Create("Journal Prefix", sizeof(JournalPrefix));
ADD_FIELD(object, JournalPrefix, magic);
ADD_FIELD(object, JournalPrefix, sequence_number);
ADD_FIELD(object, JournalPrefix, flags);
ADD_FIELD(object, JournalPrefix, reserved);
return object;
}
std::unique_ptr<disk_inspector::DiskStruct> GetJournalHeaderBlockStruct(uint64_t index) {
static_assert(offsetof(JournalHeaderBlock, reserved) == 8188);
std::unique_ptr<disk_inspector::DiskStruct> object = disk_inspector::DiskStruct::Create(
"Journal Header, Block #" + std::to_string(index), sizeof(JournalHeaderBlock));
ADD_STRUCT_FIELD(object, JournalHeaderBlock, prefix, GetJournalPrefixStruct());
ADD_FIELD(object, JournalHeaderBlock, payload_blocks);
ADD_ARRAY_FIELD(object, JournalHeaderBlock, target_blocks, kMaxBlockDescriptors);
ADD_ARRAY_FIELD(object, JournalHeaderBlock, target_flags, kMaxBlockDescriptors);
ADD_FIELD(object, JournalHeaderBlock, reserved);
return object;
}
std::unique_ptr<disk_inspector::DiskStruct> GetJournalCommitBlockStruct(uint64_t index) {
static_assert(sizeof(JournalCommitBlock) == 40);
std::unique_ptr<disk_inspector::DiskStruct> object = disk_inspector::DiskStruct::Create(
"Journal Commit, Block #" + std::to_string(index), sizeof(JournalCommitBlock));
ADD_STRUCT_FIELD(object, JournalCommitBlock, prefix, GetJournalPrefixStruct());
ADD_FIELD(object, JournalCommitBlock, checksum);
return object;
}
} // namespace fs