linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Tejun Heo <htejun@gmail.com>
Cc: Steven Scholz <steven.scholz@imc-berlin.de>, linux-ide@vger.kernel.org
Subject: Re: when are buffers/caches flushed?
Date: Thu, 18 Aug 2005 14:24:25 +0200	[thread overview]
Message-ID: <58cb370e0508180524145d846a@mail.gmail.com> (raw)
In-Reply-To: <43047830.4060705@gmail.com>

Hi,

On 8/18/05, Tejun Heo <htejun@gmail.com> 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/cset@40bec934PKpDSgX_q3NCTdKXxyk6bw?nav=index.html|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

  parent reply	other threads:[~2005-08-18 12:24 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-18 10:51 when are buffers/caches flushed? Steven Scholz
2005-08-18 11:24 ` Tejun Heo
2005-08-18 11:34   ` Steven Scholz
2005-08-18 11:59     ` Tejun Heo
2005-08-18 12:12       ` Steven Scholz
2005-08-18 12:19         ` Tejun Heo
2005-08-18 12:24       ` Bartlomiej Zolnierkiewicz [this message]
2005-08-18 12:44         ` Tejun Heo
2005-08-18 13:03           ` Bartlomiej Zolnierkiewicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58cb370e0508180524145d846a@mail.gmail.com \
    --to=bzolnier@gmail.com \
    --cc=htejun@gmail.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=steven.scholz@imc-berlin.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).