From d4211b210e3e63f69bc3b86555b563a323f8d865 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 11 Jan 2025 11:51:31 +0100 Subject: WIP: Working on a fix for NeFS forks. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/FSKit/NeFS.h | 11 +++---- dev/Kernel/src/FS/NeFS.cc | 69 ++++++++++++++------------------------------ dev/Kernel/src/KernelMain.cc | 2 +- 3 files changed, 28 insertions(+), 54 deletions(-) (limited to 'dev/Kernel') diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h index b9babad8..1a744ad0 100644 --- a/dev/Kernel/FSKit/NeFS.h +++ b/dev/Kernel/FSKit/NeFS.h @@ -406,19 +406,20 @@ namespace Kernel rt_copy_memory(mNode->Name, new_fork.CatalogName, rt_string_len(mNode->Name)); rt_copy_memory(journal_name.Data(), new_fork.ForkName, rt_string_len(journal_name.Data())); - new_fork.DataSize = xml_data.Length(); - - new_fork.Kind = kNeFSRsrcForkKind; + new_fork.DataSize = kNeFSForkDataSz; + new_fork.Kind = kNeFSRsrcForkKind; parser->CreateFork(mNode, new_fork); kcout << "Commit: " << xml_data.Data() << "\r\nTo: " << journal_name.Data() << endl; - return parser->WriteCatalog(mNode, YES, xml_data.Data(), xml_data.Length(), journal_name.CData()); + auto ret = parser->WriteCatalog(mNode, YES, xml_data.Data(), xml_data.Length(), journal_name.CData()); + + return ret; } private: - Char mStamp[255] = {"/system/zka_journal" kNeFSJournalExt}; + Char mStamp[255] = {"/system/journal_sys" kNeFSJournalExt}; }; namespace Detail diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 784275f8..6f4c43b9 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -64,82 +64,55 @@ _Output NFS_FORK_STRUCT* NeFileSystemParser::CreateFork(_Input NFS_CATALOG_STRUC _Input NFS_FORK_STRUCT& the_fork) { if (catalog && the_fork.ForkName[0] != 0 && - the_fork.DataSize <= kNeFSForkDataSz) + the_fork.DataSize == kNeFSForkDataSz) { Lba lba = (the_fork.Kind == kNeFSDataForkKind) ? catalog->DataFork : catalog->ResourceFork; - kcout << "Fork LBA: " << hex_number(lba) << endl; - - if (lba <= kNeFSCatalogStartAddress) - return nullptr; - auto drv = kDiskMountpoint.A(); /// special treatment. rt_copy_memory((VoidPtr) "fs/nefs-packet", drv.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); - NFS_FORK_STRUCT curFork{0}; - NFS_FORK_STRUCT prevFork{0}; - Lba lbaOfPreviousFork = lba; + NFS_FORK_STRUCT cur_fork{0}; + Lba lba_prev_fork = lba; /// do not check for anything. Loop until we get what we want, that is a free fork zone. while (lba <= kNeFSCatalogStartAddress) { drv.fPacket.fPacketLba = lba; drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &curFork; + drv.fPacket.fPacketContent = &cur_fork; drv.fInput(&drv.fPacket); - if (curFork.NextSibling > kBadAddress) - { - kcout << "Bad fork: " << hex_number(curFork.NextSibling) << endl; - break; - } - - kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; + kcout << "Next fork: " << hex_number(cur_fork.NextSibling) << endl; - if (curFork.Flags & kNeFSFlagCreated) + if (cur_fork.Flags & kNeFSFlagCreated) { - kcout << "Fork already exists.\r"; - /// sanity check. - if (StringBuilder::Equals(curFork.ForkName, the_fork.ForkName) && - StringBuilder::Equals(curFork.CatalogName, catalog->Name)) + if (StringBuilder::Equals(cur_fork.ForkName, the_fork.ForkName) && + StringBuilder::Equals(cur_fork.CatalogName, catalog->Name)) + { + kcout << "Fork already exists.\r"; return nullptr; + } - kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; - - lbaOfPreviousFork = lba; - lba = curFork.NextSibling; + kcout << "Next fork: " << hex_number(cur_fork.NextSibling) << endl; - prevFork = curFork; + lba_prev_fork = lba; + lba = cur_fork.NextSibling; } else { - /// This is a check that we have, in order to link the previous fork - /// entry. - if (lba >= kNeFSCatalogStartAddress) - { - drv.fPacket.fPacketLba = lbaOfPreviousFork; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &prevFork; - - prevFork.NextSibling = lba; - - /// write to disk. - drv.fOutput(&drv.fPacket); - } - break; } } the_fork.Flags |= kNeFSFlagCreated; the_fork.DataOffset = lba - sizeof(NFS_FORK_STRUCT); - the_fork.PreviousSibling = lbaOfPreviousFork; + the_fork.PreviousSibling = lba_prev_fork; the_fork.NextSibling = the_fork.DataOffset - the_fork.DataSize - sizeof(NFS_FORK_STRUCT); drv.fPacket.fPacketLba = lba; @@ -279,9 +252,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* /// Locate parent catalog, to then allocate right after it. - for (SizeT indexFill = 0; indexFill < rt_string_len(name); ++indexFill) + for (SizeT index_fill = 0; index_fill < rt_string_len(name); ++index_fill) { - parent_name[indexFill] = name[indexFill]; + parent_name[index_fill] = name[index_fill]; } SizeT index_reverse_copy = rt_string_len(parent_name); @@ -387,7 +360,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* return nullptr; } - child_catalog->DataFork = part_block->DiskSize - start_free; + child_catalog->DataFork = part_block->DiskSize - kNeFSRootCatalogStartAddress - start_free; child_catalog->ResourceFork = child_catalog->DataFork; // Write the new catalog next sibling, if we don't know this parent. // @@ -755,9 +728,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c { Char parent_name[kNeFSNodeNameLen] = {0}; - for (SizeT indexFill = 0; indexFill < rt_string_len(catalog_name); ++indexFill) + for (SizeT index_fill = 0; index_fill < rt_string_len(catalog_name); ++index_fill) { - parent_name[indexFill] = catalog_name[indexFill]; + parent_name[index_fill] = catalog_name[index_fill]; } SizeT index_reverse_copy = rt_string_len(parent_name); @@ -1055,7 +1028,7 @@ namespace Kernel::Detail kcout << "Creating A:\r"; kDiskMountpoint.A() = io_construct_main_drive(); - + kcout << "Creating A: [ OK ]\r"; return true; diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index 06223ff9..fea439ca 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -72,7 +72,7 @@ namespace Kernel::Detail mJournal.CreateJournal(mNeFS); KString xml; - xml += "Formatted Filesystem"; + xml += "Format Filesystem NeFS for ZkaOS."; KString name; name += "NeFS Format System"; -- cgit v1.2.3