Modules/Ext2 - Bugfixing to write support
[tpg/acess2.git] / KernelLand / Modules / Filesystems / Ext2 / ext2.c
index 4d13f1e..3a9a080 100644 (file)
@@ -139,7 +139,7 @@ tVFS_Node *Ext2_InitDevice(const char *Device, const char **Options)
        disk->GroupCount = groupCount;\r
        \r
        // Get an inode cache handle\r
-       disk->CacheID = Inode_GetHandle();\r
+       disk->CacheID = Inode_GetHandle(NULL);\r
        \r
        // Get Block Size\r
        if( sb.s_log_block_size > MAX_BLOCK_LOG_SIZE ) {\r
@@ -395,7 +395,7 @@ tVFS_Node *Ext2_int_CreateNode(tExt2_Disk *Disk, Uint InodeID)
 \r
 int Ext2_int_WritebackNode(tExt2_Disk *Disk, tVFS_Node *Node)\r
 {\r
-       tExt2_Inode     inode;\r
+       tExt2_Inode     inode = {0};\r
 \r
        if( Disk != Node->ImplPtr ) {\r
                Log_Error("Ext2", "Ext2_int_WritebackNode - Disk != Node->ImplPtr");\r
@@ -529,7 +529,7 @@ Uint32 Ext2_int_AllocateInode(tExt2_Disk *Disk, Uint32 Parent)
                VFS_ReadAt(Disk->FD, Disk->BlockSize*bg->bg_inode_bitmap+ofs, sector_size, buf);\r
 \r
                int byte, bit;\r
-               for( byte = 0; byte < sector_size && buf[byte] != 0xFF; byte ++ )\r
+               for( byte = 0; byte < sector_size && buf[byte] == 0xFF; byte ++ )\r
                        ;\r
                if( byte < sector_size )\r
                {\r
@@ -577,6 +577,14 @@ void Ext2_int_UpdateSuperblock(tExt2_Disk *Disk)
        // Update Primary\r
        VFS_WriteAt(Disk->FD, 1024, 1024, &Disk->SuperBlock);\r
        \r
+       // - Update block groups while we're at it\r
+       VFS_WriteAt(\r
+               Disk->FD,\r
+               Disk->SuperBlock.s_first_data_block * Disk->BlockSize + 1024,\r
+               sizeof(tExt2_Group)*Disk->GroupCount,\r
+               Disk->Groups\r
+               );\r
+       \r
        // Secondaries\r
        // at Block Group 1, 3^n, 5^n, 7^n\r
        \r

UCC git Repository :: git.ucc.asn.au