X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fvfs%2Fnodecache.c;h=a898d5d6ebf131a4ad538d4fd7b6d983782b5357;hb=6f1c621ed4d24ddbdc863cd5ef684e919c8f8b55;hp=983f3f776a8ee4b847106892512c37303dfbbd23;hpb=8bc40333b1401d7616b225945fee53d972c2f418;p=tpg%2Facess2.git diff --git a/Kernel/vfs/nodecache.c b/Kernel/vfs/nodecache.c index 983f3f77..a898d5d6 100644 --- a/Kernel/vfs/nodecache.c +++ b/Kernel/vfs/nodecache.c @@ -2,7 +2,7 @@ * AcessMicro VFS * - File IO Passthru's */ -#include +#include #include "vfs.h" #include "vfs_int.h" @@ -121,9 +121,9 @@ void Inode_UncacheNode(int Handle, Uint64 Inode) tCachedInode *ent, *prev; cache = Inode_int_GetFSCache(Handle); - if(!cache) return; + if(!cache) return ; - if(Inode > cache->MaxCached) return; + if(Inode > cache->MaxCached) return ; // Search Cache ent = cache->FirstNode; @@ -147,8 +147,10 @@ void Inode_UncacheNode(int Handle, Uint64 Inode) free(ent); } - return; + return ; } + + return ; } /** @@ -158,11 +160,16 @@ void Inode_UncacheNode(int Handle, Uint64 Inode) void Inode_ClearCache(int Handle) { tInodeCache *cache; - tInodeCache *prev = (tInodeCache*) &gVFS_InodeCache; + tInodeCache *prev = NULL; tCachedInode *ent, *next; - cache = Inode_int_GetFSCache(Handle); - if(!cache) return; + // Find the cache + for( + cache = gVFS_InodeCache; + cache && cache->Handle < Handle; + prev = cache, cache = cache->Next + ); + if(!cache || cache->Handle != Handle) return; // Search Cache ent = cache->FirstNode; @@ -179,7 +186,10 @@ void Inode_ClearCache(int Handle) } // Free Cache - prev->Next = cache->Next; + if(prev == NULL) + gVFS_InodeCache = cache->Next; + else + prev->Next = cache->Next; free(cache); }