ide_dma_speed() fails to actually honor the IDE drivers' mode support masks) because of the bogus checks -- thus, selecting the DMA transfer mode that the driver explicitly refuses to support is possible. Additionally, there is no check for validity of the UltraDMA mode data in the drive ID, and the function is misdocumented.
drivers/ide/ide-lib.c: In function `ide_dma_speed':
drivers/ide/ide-lib.c:86: warning: `ultra_mask' might be used uninitialized in this function
Looks like a real bug to me - it depends up on the values of `mode' and
id->field_value.
Anyway, I'll drop it, please review and fix. I assume that warning was
occurring for you as well - please spend more time over these things. Especially when working on IDE, where bugs are slow to show themselves and
have particularly bad consequences.