There are several races in floppy driver between bottom half(scheduled_work) and timers (fd_timeout, fd_timer). Due to slownessof the actual floppy devices, those races are never (at least to myknowledge) triggered on a bare floppy metal. However on virtualized(emulated) floppy drives, which are of course magnitudes fasterthan the real ones, these races trigger reliably. They usually exhibitthemselves as NULL pointer dereferences during DMA setup, such as

This patch converts all the timers and bottom halfs to be processed in a singleworkqueue. This aproach has been already discussed back in 2010 if I remembercorrectly, and Acked by Linus [1], but it then never made it to the tree.

This all is based on original idea and code of Stephen Hemminger. I haveported original Stepen's code to the current state of the floppy driver, andperformed quite some testing (on real hardware), which didn't reveal any issues(this includes not only writing and reading data, but also formatting(unfortunately I didn't find any Double-Density disks any more)). Ability tohandle errors properly (supplying known bad floppies) has also been verified.