extern ULONG CcMapDataNoWait;
extern ULONG CcPinReadWait;
extern ULONG CcPinReadNoWait;
+extern ULONG CcPinMappedDataCount;
extern ULONG CcDataPages;
extern ULONG CcDataFlushes;
CSHORT NodeByteSize;
ULONG OpenCount;
LARGE_INTEGER FileSize;
+ LIST_ENTRY BcbList;
LARGE_INTEGER SectionSize;
PFILE_OBJECT FileObject;
ULONG DirtyPages;
PVOID LazyWriteContext;
LIST_ENTRY PrivateList;
ULONG DirtyPageThreshold;
+ KSPIN_LOCK BcbSpinLock;
PRIVATE_CACHE_MAP PrivateCacheMap;
/* ROS specific */
LIST_ENTRY VacbLruListEntry;
/* Offset in the file which this view maps. */
LARGE_INTEGER FileOffset;
- /* Mutex */
- KMUTEX Mutex;
/* Number of references. */
volatile ULONG ReferenceCount;
- /* How many times was it pinned? */
- _Guarded_by_(Mutex)
- LONG PinCount;
/* Pointer to the shared cache map for the file which this view maps data for. */
PROS_SHARED_CACHE_MAP SharedCacheMap;
/* Pointer to the next VACB in a chain. */
PUBLIC_BCB PFCB;
PROS_VACB Vacb;
BOOLEAN Dirty;
- BOOLEAN Pinned;
+ ULONG PinCount;
CSHORT RefCount; /* (At offset 0x34 on WinNT4) */
+ LIST_ENTRY BcbEntry;
} INTERNAL_BCB, *PINTERNAL_BCB;
typedef struct _LAZY_WRITER
CcPerformReadAhead(
IN PFILE_OBJECT FileObject);
-FORCEINLINE
NTSTATUS
-CcRosAcquireVacbLock(
- _Inout_ PROS_VACB Vacb,
- _In_ PLARGE_INTEGER Timeout)
-{
- NTSTATUS Status;
- Status = KeWaitForSingleObject(&Vacb->Mutex,
- Executive,
- KernelMode,
- FALSE,
- Timeout);
- return Status;
-}
-
-FORCEINLINE
-VOID
-CcRosReleaseVacbLock(
- _Inout_ PROS_VACB Vacb)
-{
- KeReleaseMutex(&Vacb->Mutex, FALSE);
-}
+CcRosInternalFreeVacb(
+ IN PROS_VACB Vacb);
FORCEINLINE
BOOLEAN
#else
#define CcRosVacbIncRefCount(vacb) InterlockedIncrement((PLONG)&(vacb)->ReferenceCount)
-#define CcRosVacbDecRefCount(vacb) InterlockedDecrement((PLONG)&(vacb)->ReferenceCount)
+FORCEINLINE
+ULONG
+CcRosVacbDecRefCount(
+ PROS_VACB vacb)
+{
+ ULONG Refs;
+
+ Refs = InterlockedDecrement((PLONG)&vacb->ReferenceCount);
+ if (Refs == 0)
+ {
+ CcRosInternalFreeVacb(vacb);
+ }
+ return Refs;
+}
#define CcRosVacbGetRefCount(vacb) InterlockedCompareExchange((PLONG)&(vacb)->ReferenceCount, 0, 0)
#endif