Modules/EXT2 - Working on write support
[tpg/acess2.git] / KernelLand / Modules / Filesystems / Ext2 / ext2.c
index 971ef28..f8f942d 100644 (file)
@@ -17,15 +17,16 @@ extern tVFS_NodeType        gExt2_DirType;
  int   Ext2_Install(char **Arguments);\r
  int   Ext2_Cleanup(void);\r
 // - Interface Functions\r
- int           Ext2_Detect(int FD);\r
+ int    Ext2_Detect(int FD);\r
 tVFS_Node      *Ext2_InitDevice(const char *Device, const char **Options);\r
-void           Ext2_Unmount(tVFS_Node *Node);\r
-void           Ext2_CloseFile(tVFS_Node *Node);\r
+void   Ext2_Unmount(tVFS_Node *Node);\r
+void   Ext2_CloseFile(tVFS_Node *Node);\r
 // - Internal Helpers\r
- int           Ext2_int_GetInode(tVFS_Node *Node, tExt2_Inode *Inode);\r
-Uint64         Ext2_int_GetBlockAddr(tExt2_Disk *Disk, Uint32 *Blocks, int BlockNum);\r
-Uint32         Ext2_int_AllocateInode(tExt2_Disk *Disk, Uint32 Parent);\r
-void           Ext2_int_UpdateSuperblock(tExt2_Disk *Disk);\r
+ int   Ext2_int_GetInode(tVFS_Node *Node, tExt2_Inode *Inode);\r
+Uint64 Ext2_int_GetBlockAddr(tExt2_Disk *Disk, Uint32 *Blocks, int BlockNum);\r
+Uint32 Ext2_int_AllocateInode(tExt2_Disk *Disk, Uint32 Parent);\r
+void   Ext2_int_DereferenceInode(tExt2_Disk *Disk, Uint32 Inode);\r
+void   Ext2_int_UpdateSuperblock(tExt2_Disk *Disk);\r
 \r
 // === SEMI-GLOBALS ===\r
 MODULE_DEFINE(0, VERSION, FS_Ext2, Ext2_Install, Ext2_Cleanup);\r
@@ -208,7 +209,22 @@ void Ext2_Unmount(tVFS_Node *Node)
 void Ext2_CloseFile(tVFS_Node *Node)\r
 {\r
        tExt2_Disk      *disk = Node->ImplPtr;\r
-       Inode_UncacheNode(disk->CacheID, Node->Inode);\r
+\r
+       if( Mutex_Acquire(&Node->Lock) != 0 )\r
+       {\r
+               return ;\r
+       }\r
+\r
+       if( Node->Flags & VFS_FFLAG_DIRTY )\r
+       {\r
+               // Commit changes\r
+       }\r
+\r
+       int was_not_referenced = (Node->ImplInt == 0);\r
+       if( Inode_UncacheNode(disk->CacheID, Node->Inode) && was_not_referenced )\r
+       {\r
+               // Remove inode\r
+       }\r
        return ;\r
 }\r
 \r
@@ -337,6 +353,14 @@ Uint32 Ext2_int_AllocateInode(tExt2_Disk *Disk, Uint32 Parent)
        return 0;\r
 }\r
 \r
+/**\r
+ * \brief Reduce the reference count on an inode\r
+ */\r
+void Ext2_int_DereferenceInode(tExt2_Disk *Disk, Uint32 Inode)\r
+{\r
+       \r
+}\r
+\r
 /**\r
  * \fn void Ext2_int_UpdateSuperblock(tExt2_Disk *Disk)\r
  * \brief Updates the superblock\r

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