IRQL_GT_ZERO_AT_SYSTEM_SERVICE

I encountered this problem while testing my driver. I implement caching as
described in Nagar’s book. I got the following assertion:

*** Assertion failed: (CurrentThread->NestedFaultCount == 1) ||
(CurrentThread->NestedFaultCount == 2)
*** Source File: F:\nt\private\ntos\mm\pagfault.c, line 1015

Here’s the stack after I broke into debugger:

f521b5ec 804af2e5 819c3930 00000000 f521b608 nt!DbgBreakPoint
f521b8c8 80472f1c 8047213c 80472118 000003f7 nt!RtlAssert+0x9a
f521b8f8 804741d5 d2558000 e271e388 00000000
nt!MiResolveTransitionFault+0x130
f521b928 80470e75 00000000 d2558000 c0349560 nt!MiResolveProtoPteFault+0x25d
f521b974 80492f70 00000000 d2558000 c0349560 nt!MiDispatchFault+0x27f
f521b9c8 804c1fa3 00000000 d2558000 00000000 nt!MmAccessFault+0xbac
f521b9c8 8040b381 00000000 d2558000 00000000 nt!KiTrap0E+0xe7
f521bb14 eb035f8c 815a05e8 f521bb8c 00001000 nt!CcCopyRead+0x1fd
f521bbb4 eb035b21 b444bfd8 8186ff70 0186ff70
Vba32dNT!CRootDeviceExtension::CommonRead+0x369
f521bbd0 eb03a81f b4447f68 00000003 8186ff70
Vba32dNT!CRootDeviceExtension::OnRead+0x51
f521bbe4 eb03ae39 8186feb8 b4447f68 8186ff70
Vba32dNT!CRootDeviceExtension::_DispatchHandler+0x6f
f521bbf8 8060870f 8186feb8 b4447f68 80062f50
Vba32dNT!CDriverImpl::_DispatchHandler+0x29
f521bc44 8053444c b4447fd8 b4447f68 00000000 nt!IovSpecialIrpCallDriver+0xe4
f521bc58 8052ee27 8186feb8 b4447f68 815a05e8
nt!IopSynchronousServiceTail+0x94
f521bd2c 804be60a 00000110 00000000 00000000 nt!NtReadFile+0x62d
f521bd2c 77f7900f 00000110 00000000 00000000 nt!KiSystemService+0x10a
0235f474 77e68a07 00000110 00000000 00000000 ntdll!ZwReadFile+0xb
0235f4e8 01fd6bdb 00000110 023b0ff4 00001000 kernel32!ReadFile+0x181

If I continue I get IRQL_GT_ZERO_AT_SYSTEM_SERVICE (4a) bugcheck. This error
occured after a long time test. I’m not sure I will be able to reproduce the
situation.

Any ideas about things happening are welcomed.