Changed tVFS_Node->close on a mount root to be a no-op by convention and added tVFS_D...
authorJohn Hodge <[email protected]>
Fri, 25 Sep 2009 12:18:34 +0000 (20:18 +0800)
committerJohn Hodge <[email protected]>
Fri, 25 Sep 2009 12:18:34 +0000 (20:18 +0800)
Kernel/include/vfs.h
Kernel/vfs/fs/devfs.c
Kernel/vfs/fs/fat.c
Kernel/vfs/fs/root.c

index 12cc8a4..209889c 100644 (file)
@@ -80,6 +80,7 @@ typedef struct sVFS_Driver {
        char    *Name;
        Uint    Flags;
        tVFS_Node       *(*InitDevice)(char *Device, char *Options);
+       void    (*Unmount)(tVFS_Node *Node);
        struct sVFS_Driver      *Next;
 } tVFS_Driver;
 
index 25be490..2558509 100644 (file)
@@ -15,7 +15,7 @@ tVFS_Node     *DevFS_FindDir(tVFS_Node *Node, char *Name);
 
 // === GLOBALS ===
 tVFS_Driver    gDevFS_Info = {
-       "devfs", 0, DevFS_InitDevice, NULL
+       "devfs", 0, DevFS_InitDevice, NULL, NULL
        };
 tVFS_Node      gDevFS_RootNode = {
        .NumACLs = 1,
index c4f6671..8cfeca4 100644 (file)
@@ -39,7 +39,7 @@ typedef struct s_lfncache {
 // === PROTOTYPES ===\r
  int   FAT_Install(char **Arguments);\r
 tVFS_Node      *FAT_InitDevice(char *device, char *options);\r
-void   FAT_CloseDevice(tVFS_Node *node);\r
+void   FAT_Unmount(tVFS_Node *Node);\r
 Uint64 FAT_Read(tVFS_Node *node, Uint64 offset, Uint64 length, void *buffer);\r
 Uint64 FAT_Write(tVFS_Node *node, Uint64 offset, Uint64 length, void *buffer);\r
 char   *FAT_ReadDir(tVFS_Node *dirNode, int dirpos);\r
@@ -59,7 +59,7 @@ Uint32        *fat_cache[8];
 t_lfncache     *fat_lfncache;\r
 #endif\r
 tVFS_Driver    gFAT_FSInfo = {\r
-       "fat", 0, FAT_InitDevice, NULL\r
+       "fat", 0, FAT_InitDevice, FAT_Unmount, NULL\r
        };\r
 \r
 // === CODE ===\r
@@ -244,26 +244,24 @@ tVFS_Node *FAT_InitDevice(char *Device, char *options)
        node->FindDir = FAT_FindDir;\r
        node->Relink = FAT_Relink;\r
        node->MkNod = FAT_Mknod;\r
-       node->Close = FAT_CloseDevice;\r
+       //node->Close = FAT_CloseDevice;\r
        \r
        giFAT_PartCount ++;\r
        return node;\r
 }\r
 \r
 /**\r
- * \fn void FAT_CloseDevice(tVFS_Node *node)\r
+ * \fn void FAT_Unmount(tVFS_Node *Node)\r
  * \brief Closes a mount and marks it as free\r
  */\r
-void FAT_CloseDevice(tVFS_Node *node)\r
+void FAT_Unmount(tVFS_Node *Node)\r
 {\r
-       node->ReferenceCount --;\r
-       \r
-       if(node->ReferenceCount > 0)    return;\r
-       \r
        // Close Disk Handle\r
-       VFS_Close( gFAT_Disks[node->ImplInt].fileHandle );\r
-       Inode_ClearCache(gFAT_Disks[node->ImplInt].inodeHandle);\r
-       gFAT_Disks[node->ImplInt].fileHandle = -2;\r
+       VFS_Close( gFAT_Disks[Node->ImplInt].fileHandle );\r
+       // Clear Node Cache\r
+       Inode_ClearCache(gFAT_Disks[Node->ImplInt].inodeHandle);\r
+       // Mark as unused\r
+       gFAT_Disks[Node->ImplInt].fileHandle = -2;\r
        return;\r
 }\r
 \r
index e035fd7..4a81715 100644 (file)
@@ -19,7 +19,9 @@ tRamFS_File   *Root_int_AllocFile();
 
 // === GLOBALS ===
 tVFS_Driver    gRootFS_Info = {
-       "rootfs", 0, Root_InitDevice,
+       "rootfs", 0,
+       Root_InitDevice,
+       NULL,   // Unmount
        NULL
 };
 tRamFS_File    RootFS_Files[MAX_FILES];

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