Kernel/VFS - Update to node cache to support extra allocated data
authorJohn Hodge <[email protected]>
Sun, 23 Jun 2013 06:42:00 +0000 (14:42 +0800)
committerJohn Hodge <[email protected]>
Sun, 23 Jun 2013 06:42:00 +0000 (14:42 +0800)
KernelLand/Kernel/include/vfs.h
KernelLand/Kernel/vfs/nodecache.c

index 82e6b56..d2cdf20 100644 (file)
@@ -518,6 +518,7 @@ extern tVFS_Node    *Inode_GetCache(int Handle, Uint64 Inode);
  * \return A pointer to the node in the node cache
  */
 extern tVFS_Node       *Inode_CacheNode(int Handle, tVFS_Node *Node);
+extern tVFS_Node       *Inode_CacheNodeEx(int Handle, tVFS_Node *Node, size_t Size);
 /**
  * \fn int Inode_UncacheNode(int Handle, Uint64 Inode)
  * \brief Dereferences (and removes if needed) a node from the cache
index b2cc57f..aee1826 100644 (file)
@@ -83,10 +83,17 @@ tVFS_Node *Inode_GetCache(int Handle, Uint64 Inode)
  * \fn tVFS_Node *Inode_CacheNode(int Handle, tVFS_Node *Node)
  */
 tVFS_Node *Inode_CacheNode(int Handle, tVFS_Node *Node)
+{
+       return Inode_CacheNodeEx(Handle, Node, sizeof(*Node));
+}
+
+tVFS_Node *Inode_CacheNodeEx(int Handle, tVFS_Node *Node, size_t Size)
 {
        tInodeCache     *cache;
        tCachedInode    *newEnt, *ent, *prev = NULL;
-       
+
+       ASSERT(Size >= sizeof(tVFS_Node));      
+
        cache = Inode_int_GetFSCache(Handle);
        if(!cache)      return NULL;
        
@@ -106,9 +113,9 @@ tVFS_Node *Inode_CacheNode(int Handle, tVFS_Node *Node)
        }
        
        // Create new entity
-       newEnt = malloc(sizeof(tCachedInode));
+       newEnt = malloc(sizeof(tCachedInode) + (Size - sizeof(tVFS_Node)));
        newEnt->Next = ent;
-       memcpy(&newEnt->Node, Node, sizeof(tVFS_Node));
+       memcpy(&newEnt->Node, Node, Size);
        if( prev )
                prev->Next = newEnt;
        else

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