mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 04:20:46 +00:00
Hervé Poussineau <poussine@freesurf.fr>
Use fast mutexes instead of spin locks because the file system callbacks shouldn't be called at DISPATCH_LEVEL. svn path=/trunk/; revision=13357
This commit is contained in:
parent
66044ade6b
commit
00ae7e938d
1 changed files with 11 additions and 12 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id:$
|
/* $Id$
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -35,7 +35,7 @@ typedef struct _FS_CHANGE_NOTIFY_ENTRY
|
||||||
static ERESOURCE FileSystemListLock;
|
static ERESOURCE FileSystemListLock;
|
||||||
static LIST_ENTRY FileSystemListHead;
|
static LIST_ENTRY FileSystemListHead;
|
||||||
|
|
||||||
static KSPIN_LOCK FsChangeNotifyListLock;
|
static FAST_MUTEX FsChangeNotifyListLock;
|
||||||
static LIST_ENTRY FsChangeNotifyListHead;
|
static LIST_ENTRY FsChangeNotifyListHead;
|
||||||
|
|
||||||
#define TAG_FILE_SYSTEM TAG('F', 'S', 'Y', 'S')
|
#define TAG_FILE_SYSTEM TAG('F', 'S', 'Y', 'S')
|
||||||
|
@ -178,7 +178,7 @@ IoInitFileSystemImplementation(VOID)
|
||||||
ExInitializeResourceLite(&FileSystemListLock);
|
ExInitializeResourceLite(&FileSystemListLock);
|
||||||
|
|
||||||
InitializeListHead(&FsChangeNotifyListHead);
|
InitializeListHead(&FsChangeNotifyListHead);
|
||||||
KeInitializeSpinLock(&FsChangeNotifyListLock);
|
ExInitializeFastMutex(&FsChangeNotifyListLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -709,9 +709,8 @@ IopNotifyFileSystemChange(PDEVICE_OBJECT DeviceObject,
|
||||||
{
|
{
|
||||||
PFS_CHANGE_NOTIFY_ENTRY ChangeEntry;
|
PFS_CHANGE_NOTIFY_ENTRY ChangeEntry;
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
KIRQL oldlvl;
|
|
||||||
|
|
||||||
KeAcquireSpinLock(&FsChangeNotifyListLock,&oldlvl);
|
ExAcquireFastMutex(&FsChangeNotifyListLock);
|
||||||
Entry = FsChangeNotifyListHead.Flink;
|
Entry = FsChangeNotifyListHead.Flink;
|
||||||
while (Entry != &FsChangeNotifyListHead)
|
while (Entry != &FsChangeNotifyListHead)
|
||||||
{
|
{
|
||||||
|
@ -721,7 +720,7 @@ IopNotifyFileSystemChange(PDEVICE_OBJECT DeviceObject,
|
||||||
|
|
||||||
Entry = Entry->Flink;
|
Entry = Entry->Flink;
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(&FsChangeNotifyListLock,oldlvl);
|
ExReleaseFastMutex(&FsChangeNotifyListLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -743,9 +742,10 @@ IoRegisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject,
|
||||||
Entry->DriverObject = DriverObject;
|
Entry->DriverObject = DriverObject;
|
||||||
Entry->FSDNotificationProc = FSDNotificationProc;
|
Entry->FSDNotificationProc = FSDNotificationProc;
|
||||||
|
|
||||||
ExInterlockedInsertHeadList(&FsChangeNotifyListHead,
|
ExAcquireFastMutex(&FsChangeNotifyListLock);
|
||||||
&Entry->FsChangeNotifyList,
|
InsertHeadList(&FsChangeNotifyListHead,
|
||||||
&FsChangeNotifyListLock);
|
&Entry->FsChangeNotifyList);
|
||||||
|
ExReleaseFastMutex(&FsChangeNotifyListLock);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
@ -760,7 +760,6 @@ IoUnregisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject,
|
||||||
{
|
{
|
||||||
PFS_CHANGE_NOTIFY_ENTRY ChangeEntry;
|
PFS_CHANGE_NOTIFY_ENTRY ChangeEntry;
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
KIRQL oldlvl;
|
|
||||||
|
|
||||||
Entry = FsChangeNotifyListHead.Flink;
|
Entry = FsChangeNotifyListHead.Flink;
|
||||||
while (Entry != &FsChangeNotifyListHead)
|
while (Entry != &FsChangeNotifyListHead)
|
||||||
|
@ -769,9 +768,9 @@ IoUnregisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject,
|
||||||
if (ChangeEntry->DriverObject == DriverObject &&
|
if (ChangeEntry->DriverObject == DriverObject &&
|
||||||
ChangeEntry->FSDNotificationProc == FSDNotificationProc)
|
ChangeEntry->FSDNotificationProc == FSDNotificationProc)
|
||||||
{
|
{
|
||||||
KeAcquireSpinLock(&FsChangeNotifyListLock,&oldlvl);
|
ExAcquireFastMutex(&FsChangeNotifyListLock);
|
||||||
RemoveEntryList(Entry);
|
RemoveEntryList(Entry);
|
||||||
KeReleaseSpinLock(&FsChangeNotifyListLock,oldlvl);
|
ExReleaseFastMutex(&FsChangeNotifyListLock);
|
||||||
|
|
||||||
ExFreePool(Entry);
|
ExFreePool(Entry);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue