Hi,
On 8/18/05, Tejun Heo <[EMAIL PROTECTED]> wrote:
> Steven Scholz wrote:
> > Tejun Heo wrote:
> >
> >> Steven Scholz wrote:
> >>
> >>> Hi there,
> >>>
> >>> According to an (old) man page of sync(2)
> >>>
> >>> According to the standard specification (e.g., SVID),
> >>> sync() schedules the writes, but may return before the
> >>> actual writing is done. However, since version 1.3.20
> >>> Linux does actually wait. (This still does not guarantee
> >>> data integrity: modern disks have large caches.)
> >>>
> >>> How about recent kernels? Does sync() block until buffers are flushed?
> >>> How can I find out if the disk caches are actually flushed?
> >>>
> >>> I want to make sure that all data is flushed to my disk drive before
> >>> powering down the system.
> >>>
> >>> Thanks.
> >>>
> >>
> >> All disk caches are flushed before shutdown via the following path.
> >>
> >> kernel/sys.c::sys_reboot()
> >> kernel/drivers/base/power/shutdown.c::device_shutdown()
> >> driver specific ->shutdown callback, for ide disks, the path is
> >> drivers/ide/ide-disk.c::ide_device_shutdown()
> >> drivers/ide/ide-disk.c::ide_cacheflush_p()
> >> drivers/ide/ide-disk.c::do_idedisk_flushcache()
> >>
> >> And, AFAIK, sync() doesn't flush disk caches.
> >
> >
> > How about umount?
> >
>
> [CC'ing Bartlomiej (Hi!)]
>
> Hmmm, umount doesn't. I think maybe adding cache flushing to sync and
> umount can be helpful.
I think that cache is flushed on umount through idedisk_release().
> And one more thing, ide-disk doesn't flush cache when shutting down.
> It flushes only when rebooting.
Please see ide_disk_remove().
> from ide_device_shutdown()...
>
> #ifdef CONFIG_ALPHA
> /* On Alpha, halt(8) doesn't actually turn the machine off,
> it puts you into the sort of firmware monitor. Typically,
> it's used to boot another kernel image, so it's not much
> different from reboot(8). Therefore, we don't need to
> spin down the disk in this case, especially since Alpha
> firmware doesn't handle disks in standby mode properly.
> On the other hand, it's reasonably safe to turn the power
> off when the shutdown process reaches the firmware prompt,
> as the firmware initialization takes rather long time -
> at least 10 seconds, which should be sufficient for
> the disk to expire its write cache. */
> if (system_state != SYSTEM_POWER_OFF) {
> #else
> if (system_state == SYSTEM_RESTART) {
> #endif
> ide_cacheflush_p(drive);
> return;
> }
>
> It seems that the if clause are there due to some historic thing. The
> comment suggests that the body in the if clause spun down the drive
> previously, and we needed the if to avoid spinning down unnecessarily,
> and the if is left there after we changed the body to flush cache.
It is a correct workaround for Alpha firmware, please see the original patch:
http://linux.bkbits.net:8080/linux-2.6/[EMAIL
PROTECTED]|src/|src/drivers|src/drivers/ide|related/drivers/ide/ide-disk.c
The thing is that we want to avoid calling dev->bus->suspend() on
system_state == SYSTEM_HALT.
Bartlomiej
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html