fq - fix a (possible) deadlock
* A deadlock can occur if a lock is held around the strategy call when
the completion is synchronous and ends up in the destruction of a
tdio, as both will acquire the same diskctx lock.
* Refactor the code around strategy calls so that the bios are first
prepared, under the protection of the lock, and inserted into a local
array. Once that is ready and the bios are ready and taken out of
their respective queues, the locks are dropped and the strategy call
occurs locklessly.
Reported-by: Antonio Huete (tuxillo@)