io completion function

i was told not to wait for worker thread of a
irp_mj_read
completion routine to complete, in my bad pool
header post. i
was thinking is a better way to make a thread and
use a
linked list to pass the irp_mj_read packets i am
filtering on
a linked list /que, type structure and let the thread edit
and then
complete processing of the irp ? is this the best
way ? is
there anyone knows that i can look at.

rough idea is atm… (please advise)

io_completion_routine( theirp )
{
add_irp_Global_que( theirp );

return STATUS_MORE_PROCESSING _REQUIRED;
}

//worker thread created when driver is stated

athread( )
{

if (IRP_IN_QUE)
{
irp = get_irp_from_que();

edit_data(irp);

IoCompleteRequest( irp );

remove_irp_from_que();
}

}

will this method be fast enough ?