I have a filter that sends a read Irp down to the FSD and this read
thread then becomes blocked waiting for a paging resource. I can see
that at NtfsCommonRead+344 my thread calls NtfsAcquirePaging
ResourceExlcusive and no further work gets done then for 120ms or so.
The lock that my thread is waiting on is owned by MiMappedPageWriter. So
it looks like I’m being held up for a flush of the pages I want to read.
However, before I send my read, the file I’m reading was sent a
FlushFileBuffers and I can see all the flush writes for the file then
going out to the disk and then finally a STATUS_SUCCESS coming back from
the FlushFileBuffers call. Before I send my read Irp, therefore, all the
file’s pages should be on disk. So why am I being held up by
MiMappedPageWriter? The read Irp I’m sending down has the IRP_NOCACHE
flag set.
Thanks for any ideas.
Steve