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