void ide_timer_expiry (unsigned long data);
An IDE command has timed out before the expected drive return occurred. At this point we attempt to clean up the current mess. If the current handler includes an expiry handler then we invoke the expiry handler, and providing it is happy the work is done. If that fails we apply generic recovery rules invoking the handler and checking the drive DMA status. We have an excessively incestuous relationship with the DMA logic that wants cleaning up.