Call Fs notifications at PASSIVE_LEVEL by using a guarded mutex
Use ExFreePoolWithTag instead of ExFreePool
Modified: trunk/reactos/ntoskrnl/io/fs.c
_____
Modified: trunk/reactos/ntoskrnl/io/fs.c
--- trunk/reactos/ntoskrnl/io/fs.c 2005-05-05 13:24:39 UTC (rev
14999)
+++ trunk/reactos/ntoskrnl/io/fs.c 2005-05-05 13:27:00 UTC (rev
15000)
@@ -35,7 +35,7 @@
static ERESOURCE FileSystemListLock;
static LIST_ENTRY FileSystemListHead;
-static FAST_MUTEX FsChangeNotifyListLock;
+static KGUARDED_MUTEX FsChangeNotifyListLock;
static LIST_ENTRY FsChangeNotifyListHead;
#define TAG_FILE_SYSTEM TAG('F', 'S', 'Y', 'S')
@@ -178,7 +178,7 @@
ExInitializeResourceLite(&FileSystemListLock);
InitializeListHead(&FsChangeNotifyListHead);
- ExInitializeFastMutex(&FsChangeNotifyListLock);
+ KeInitializeGuardedMutex(&FsChangeNotifyListLock);
}
@@ -631,7 +631,7 @@
if (current->DeviceObject == DeviceObject)
{
RemoveEntryList(current_entry);
- ExFreePool(current);
+ ExFreePoolWithTag(current, TAG_FILE_SYSTEM);
ExReleaseResourceLite(&FileSystemListLock);
KeLeaveCriticalRegion();
IopNotifyFileSystemChange(DeviceObject, FALSE);
@@ -710,7 +710,7 @@
PFS_CHANGE_NOTIFY_ENTRY ChangeEntry;
PLIST_ENTRY Entry;
- ExAcquireFastMutex(&FsChangeNotifyListLock);
+ KeAcquireGuardedMutex(&FsChangeNotifyListLock);
Entry = FsChangeNotifyListHead.Flink;
while (Entry != &FsChangeNotifyListHead)
{
@@ -720,7 +720,7 @@
Entry = Entry->Flink;
}
- ExReleaseFastMutex(&FsChangeNotifyListLock);
+ KeReleaseGuardedMutex(&FsChangeNotifyListLock);
}
@@ -742,10 +742,10 @@
Entry->DriverObject = DriverObject;
Entry->FSDNotificationProc = FSDNotificationProc;
- ExAcquireFastMutex(&FsChangeNotifyListLock);
+ KeAcquireGuardedMutex(&FsChangeNotifyListLock);
InsertHeadList(&FsChangeNotifyListHead,
&Entry->FsChangeNotifyList);
- ExReleaseFastMutex(&FsChangeNotifyListLock);
+ KeReleaseGuardedMutex(&FsChangeNotifyListLock);
return(STATUS_SUCCESS);
}
@@ -768,11 +768,11 @@
if (ChangeEntry->DriverObject == DriverObject &&
ChangeEntry->FSDNotificationProc == FSDNotificationProc)
{
- ExAcquireFastMutex(&FsChangeNotifyListLock);
+ KeAcquireGuardedMutex(&FsChangeNotifyListLock);
RemoveEntryList(Entry);
- ExReleaseFastMutex(&FsChangeNotifyListLock);
+ KeReleaseGuardedMutex(&FsChangeNotifyListLock);
- ExFreePool(Entry);
+ ExFreePoolWithTag(Entry, TAG_FS_CHANGE_NOTIFY);
return;
}