Can I generate too many IRP's??

My filter driver generates several IRP’s and sends them to the file
system. Specifically, I generate an IRP_MJ_QUERY_INFORMATION call in my
IRP_MJ_WRITE routine that gets the certain attributes as well as an
IRP_MJ_WRITE call to tranfer the encrypted data to the file system (I
complete the original IRP when my call comes back.) I also generate
IRP_MJ_QUERY_INFORMATION call to get the file name in both my IRP_MJ_READ
and IRP_MJ_WRITE calls. Everything works initially; however, in high
stress situations (such as compiling a large makefile in a folder I’m
filtering), the system slows down and eventually stops altogether. Am I
just bogging down the system with all those IRP’s or is there some gotcha
I’m not handling concerning IRP generation? (For each of my IRP’s, I free
the IRP in its completion routine and return
STATUS_MORE_PROCESSING_REQUIRED from the completion routine as well as in
the IoStatus.Status field.)

BTW, if I take out the IRP’s that actually send the data to the file
system (i.e. don’t generate IRP_MJ_WRITE calls nor complete the original
IRP), the makefile still causes the system to hang - it just takes a while
longer.

Thanks for any input!
Scott