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;
 	}