Spin down HDD after disk sync or before power off
Tijl Coosemans
tijl at coosemans.org
Thu Jan 28 17:26:13 UTC 2010
On Tuesday 26 January 2010 20:17:23 Alexander Best wrote:
> because of kern/140752 i looked through a discussion back in 2009
> (http://lists.freebsd.org/pipermail/freebsd-hackers/2009-March/027879.html)
> concerning freebsd's hdd spin down procedure. right now
> ATA_FLUSHCACHE is being used although the hitachi hdd specs
> referenced in the pr say that this will not cause proper load/unload
> and thus an emergency unload will occur which reduces the life
> expectancy of hdds dramatically (20.000 shutdowns vs. 600.000
> shutdowns). unfortunately the discussion back then didn't come up
> with any sort of decision/patch.
>
> attached you'll find a very simple patch which issues
> ATA_STANDBY_IMMEDIATE instead of ATA_FLUSHCACHE during hdd spin down.
>
> could somebody with hdd knowledge comment on this? this matter seems
> quite important since there may be a chance that the current spin
> down mechanism in freebsd damages hdds!
> Index: sys/dev/ata/ata-disk.c
> ===================================================================
> --- sys/dev/ata/ata-disk.c (revision 202848)
> +++ sys/dev/ata/ata-disk.c (working copy)
> @@ -191,8 +191,9 @@
> {
> struct ata_device *atadev = device_get_softc(dev);
>
> - if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
> - ata_controlcmd(dev, ATA_FLUSHCACHE, 0, 0, 0);
> + if (atadev->param.support.command2 & ATA_SUPPORT_STANDBY)
This is the wrong bit. ATA_SUPPORT_STANDBY indicates whether a drive
can be powered up straight into standby mode.
The ATA_STANDBY_IMMEDIATE command is part of the standard power
management feature set, so this line should be:
if (atadev->param.support.command1 & ATA_SUPPORT_POWERMGT)
> + ata_controlcmd(dev, ATA_STANDBY_IMMEDIATE, 0, 0, 0);
> +
> return 0;
> }
More information about the freebsd-hackers
mailing list