HDDの電源オフからの復帰時のエラー(timeout)の対処法

背景と問題

FreeBSDでアイドル時のHDDの電源を切る方法としては、BIOSで設定するとか、ataidleを使うとかがあります。
ただ、HDDの電源を切った後、HDDにアクセスするとHDDの電源が入りますが、その際

 ad0: TIMEOUT - READ_DMA48 retrying (1 retry left) LBA=...
 ad0: FAILURE - READ_DMA48 status=51<READY,DSC,ERROR> error=10<NID_NOT_FOUND> LBA=...

など、Timeout系のエラーが報告されることがあります。WRITE_DMAの場合もあります。
retryで何事もなく動作することもありますが、場合によっては(私の場合はgeli attach/initの時とか)そのまま失敗してエラーになったり、ad0が見えなくなったり、フリーズしたりすることもあります。

対処法

http://www.nabble.com/gmirror-or-ata-problem-t3141199.html に、/usr/src/sys/dev/ata/ata-disk.c の timeout 値を15秒にする方法が書かれています。
アドホックな感じですが、これを適用したらタイムアウトすることはなくなりました。

ちなみに、環境は以下の通り。