Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163/* * COPYRIGHT: See COPYRIGHT.TXT * PROJECT: Ext2 File System Driver for WinNT/2K/XP * FILE: cmcb.c * PROGRAMMER: Matt Wu <mattwu@163.com> * HOMEPAGE: http://www.ext2fsd.com * UPDATE HISTORY: */
/* INCLUDES *****************************************************************/
#include "ext2fs.h"
/* GLOBALS ***************************************************************/
extern PEXT2_GLOBAL Ext2Global;
/* DEFINITIONS *************************************************************/
#define CMCB_DEBUG_LEVEL DL_NVR
#ifdef __REACTOS__BOOLEAN NTAPI#elseBOOLEAN#endifExt2AcquireForLazyWrite ( IN PVOID Context, IN BOOLEAN Wait){ // // On a readonly filesystem this function still has to exist but it // doesn't need to do anything.
PEXT2_FCB Fcb;
Fcb = (PEXT2_FCB) Context; ASSERT(Fcb != NULL); ASSERT((Fcb->Identifier.Type == EXT2FCB) && (Fcb->Identifier.Size == sizeof(EXT2_FCB)));#if EXT2_DEBUG DEBUG(CMCB_DEBUG_LEVEL, ("Ext2AcquireForLazyWrite: %s %s Fcb=%p\n", Ext2GetCurrentProcessName(), "ACQUIRE_FOR_LAZY_WRITE", Fcb));#endif if (!ExAcquireResourceExclusiveLite(Fcb->Header.Resource, Wait)) { return FALSE; }
ASSERT(Fcb->LazyWriterThread == NULL); Fcb->LazyWriterThread = PsGetCurrentThread();
ASSERT(IoGetTopLevelIrp() == NULL); IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP);
return TRUE;}
#ifdef __REACTOS__VOID NTAPI#elseVOID#endifExt2ReleaseFromLazyWrite (IN PVOID Context){ // // On a readonly filesystem this function still has to exist but it // doesn't need to do anything. PEXT2_FCB Fcb = (PEXT2_FCB) Context;
ASSERT(Fcb != NULL);
ASSERT((Fcb->Identifier.Type == EXT2FCB) && (Fcb->Identifier.Size == sizeof(EXT2_FCB)));#if EXT2_DEBUG DEBUG(CMCB_DEBUG_LEVEL, ( "Ext2ReleaseFromLazyWrite: %s %s Fcb=%p\n", Ext2GetCurrentProcessName(), "RELEASE_FROM_LAZY_WRITE", Fcb));#endif ASSERT(Fcb->LazyWriterThread == PsGetCurrentThread()); Fcb->LazyWriterThread = NULL;
ExReleaseResourceLite(Fcb->Header.Resource);
ASSERT(IoGetTopLevelIrp() == (PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); IoSetTopLevelIrp( NULL );}
#ifdef __REACTOS__BOOLEAN NTAPI#elseBOOLEAN#endifExt2AcquireForReadAhead (IN PVOID Context, IN BOOLEAN Wait){ PEXT2_FCB Fcb = (PEXT2_FCB) Context;
ASSERT(Fcb != NULL); ASSERT((Fcb->Identifier.Type == EXT2FCB) && (Fcb->Identifier.Size == sizeof(EXT2_FCB)));
DEBUG(CMCB_DEBUG_LEVEL, ("Ext2AcquireForReadAhead: i=%xh Fcb=%p\n", Fcb->Mcb->Inode.i_ino, Fcb));
if (!ExAcquireResourceSharedLite(Fcb->Header.Resource, Wait)) return FALSE; ASSERT(IoGetTopLevelIrp() == NULL); IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP);
return TRUE;}
#ifdef __REACTOS__VOID NTAPI#elseVOID#endifExt2ReleaseFromReadAhead (IN PVOID Context){ PEXT2_FCB Fcb = (PEXT2_FCB) Context;
ASSERT(Fcb != NULL);
ASSERT((Fcb->Identifier.Type == EXT2FCB) && (Fcb->Identifier.Size == sizeof(EXT2_FCB)));
DEBUG(CMCB_DEBUG_LEVEL, ("Ext2ReleaseFromReadAhead: i=%xh Fcb=%p\n", Fcb->Mcb->Inode.i_ino, Fcb));
IoSetTopLevelIrp(NULL); ExReleaseResourceLite(Fcb->Header.Resource);}
#ifdef __REACTOS__BOOLEAN NTAPI#elseBOOLEAN#endifExt2NoOpAcquire ( IN PVOID Fcb, IN BOOLEAN Wait){ ASSERT(IoGetTopLevelIrp() == NULL); IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); return TRUE;}
#ifdef __REACTOS__VOID NTAPI#elseVOID#endifExt2NoOpRelease ( IN PVOID Fcb){ ASSERT(IoGetTopLevelIrp() == (PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); IoSetTopLevelIrp( NULL );
return;}