Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jan 2010 18:26:09 +0100
From:      Tijl Coosemans <tijl@coosemans.org>
To:        freebsd-hackers@freebsd.org, Alexander Best <alexbestms@wwu.de>
Subject:   Re: Spin down HDD after disk sync or before power off
Message-ID:  <201001281826.10472.tijl@coosemans.org>
In-Reply-To: <permail-20100126191723f7e55a9d00001a52-a_best01@message-id.uni-muenster.de>
References:  <permail-20100126191723f7e55a9d00001a52-a_best01@message-id.uni-muenster.de>

next in thread | previous in thread | raw e-mail | index | archive | help
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;
>  }




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001281826.10472.tijl>