X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fvfs%2Fnodecache.c;h=ad85ac32773172b21d91017ed78d04815700b2b6;hb=f3d0d7fcf0496a63625c92e5ab95471e202e958e;hp=c503e9cb5b18a2a6235c301ad2511e2ec4bc461c;hpb=02dd2b97e3f4e8d52e49be1f2c90cdbc04545237;p=tpg%2Facess2.git diff --git a/Kernel/vfs/nodecache.c b/Kernel/vfs/nodecache.c index c503e9cb..ad85ac32 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" @@ -23,7 +23,7 @@ tInodeCache *Inode_int_GetFSCache(int Handle); // === GLOBALS === int gVFS_NextInodeHandle = 1; - int gilVFS_InodeCache = 0; +tShortSpinlock glVFS_InodeCache; tInodeCache *gVFS_InodeCache = NULL; // === CODE === @@ -40,10 +40,10 @@ int Inode_GetHandle() ent->Next = NULL; ent->FirstNode = NULL; // Add to list - LOCK( &gilVFS_InodeCache ); + SHORTLOCK( &glVFS_InodeCache ); ent->Next = gVFS_InodeCache; gVFS_InodeCache = ent; - RELEASE( &gilVFS_InodeCache ); + SHORTREL( &glVFS_InodeCache ); return gVFS_NextInodeHandle-1; } @@ -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,7 +160,7 @@ 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; // Find the cache @@ -184,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); }