The loop driver expects the kernel to be re-entrant, and not all
of it is. Specifically, driver requests, buffers, and interrupts
are a problem.
I've attempted a fix long ago on the first two - it seems to work okay.
I took a swipe at solving the interrupt problem [saving and restoring
the flag instead of assuming it is in a specific state], which also
seems to work, but I doubt if I got every single instance.
http://fractal.mta.ca/pub/crypto/aem/
-- Andrew E. Mileski mailto:aem@netcom.ca