[Pkg-sysvinit-devel] [PATCH] libata: remove libata.spindown_compat

Tejun Heo htejun at gmail.com
Sat May 19 11:14:03 UTC 2007


Miquel van Smoorenburg wrote:
>> In ATA, this is achieved by issuing FLUSH CACHE followed by STANDBYNOW
>> and the IDE drivers (drivers/ide/*) have always issued the sequence
>> prior to powering off. libata uses SCSI sd driver as its high level
>> disk driver and the sd driver, unfortunately, issues only the cache
>> flush command during shutdown. This is mainly because SCSI disks can be
>> accessed by multiple initiators (hosts) and spinning down disks because
>> one initiator goes down can disturb others. Because of this
>> implementation detail, libata drivers up to kernel version 2.6.21 don't
>> issue the STANDBYNOW command before powering off.
> 
> This is not quite correct.
> 
> The reason halt(8) spins down IDE disks is that, way back when (november
> 2001 I guess, from the changelog), the IDE drivers did not flush the
> cache on poweroff. The result was that on some machines, poweroff was so
> fast that the power of the drive got turned off while it still had some
> unflushed data in the write-cache, resulting in filesystem corruption.
> This problem did not exist with SCSI, apparently.
> 
> To fix this issue, halt(8) started issueing WIN_STANDBYNOW1 (0xE0) and
> WIN_STANDBYNOW2 (0x94) ioctls before halt and poweroff, as that was more
> reliable than "flush cache" and the effect was the same.

One culprit there is that, according to the spec, STANDBYNOW doesn't
necessarily imply cache flush and AFAIK issuing STANDBYNOW to libata
devices is to avoid emergency unload.  Can you comment on this Henrique?

Would changing "the IDE drivers have always" to "recent IDE drivers
issue" be enough?

Thanks.

-- 
tejun



More information about the Pkg-sysvinit-devel mailing list