public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Pimlott <andrew@pimlott.net>
To: Andi Kleen <ak@suse.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: The return of the return of crunch time (2.5 merge candidate list 1.6)
Date: Mon, 28 Oct 2002 01:03:09 -0500	[thread overview]
Message-ID: <20021028060309.GR1557@pimlott.net> (raw)
In-Reply-To: <20021028053004.C2558@wotan.suse.de>

On Mon, Oct 28, 2002 at 05:30:04AM +0100, Andi Kleen wrote:
> On Sun, Oct 27, 2002 at 10:20:38AM -0500, Andrew Pimlott wrote:
> > 
> > I'm sure there is a case where this is true, but my imagination and
> > googling failed to provide one.  Even the messages to the GNU make
> 
> foo: bar
> 	action1 <something that takes less than a second> 
> 
> frob: foo
> 	action2 <something that takes a long time>
> 
> 
> action1 is executed. foo and bar have the same time stamp. action2 
> is executed.

Try it:

    % cat Makefile 
    foo: bar
            touch foo
    frob: foo
            sleep 10
            touch frob
    % rm foo bar frob
    % touch bar
    % make frob      
    touch foo
    sleep 10
    touch frob
    % make frob
    make: `frob' is up to date.

No problem with this case.

> make runs again. Default rule sees foo.mtime == bar.mtime and starts
> action1 and action2 again.

make is not that broken.  (Well, according to one post I googled, it
was in 1970, but it was noticed and fixed, and the fixed behavior
has long been standardized.)

> > Example problem case (assuming a fs that stores only seconds, and a
> > make that uses nanoseconds):
> > 
> > - I run the "save and build" command while editing foo.c at T = 0.1.
> > - foo.o is built at T = 0.2.
> > - I do some read-only operations on foo.c (eg, checkin), such that
> >   foo.o gets flushed but foo.c stays in memory.
> > - I build again.  foo.o is reloaded and has timestamp T = 0, and so
> >   gets spuriously rebuilt.
> 
> Yes, when you file system has only second resolution then you can get
> spurious rebuilds if your inodes get flushed. There is no way my patch
> can fix that.

I grant that second-resolution timestamps are broken.  But you seem
to misunderstand how make works--the current problem is not that
severe.  Whereas your change introduces a different problem that (in
my estimation) is more likely to appear, and will cause mare pain.

I'm saying you're replacing a problem (bad graularity) that

    - is well known
    - is intuitive
    - doesn't cause severe problems in practice (or at least, nobody
      has provided an example)

with one (timestamps jumping at unpredictable times) that

    - is obscure
    - requires knowledge of kernel internals to understand
    - will bite people (I claim, and have provided a concrete
      example)
    - will be wickedly hard to reproduce and diagnose

> The point of my patchkit is to allow the file systems
> who support better resolution to handle it properly.

If that is the point, why not leave the behavior unchanged for other
filesystems?  (Other than that it would be a bit more work.)
Doesn't it make sense, on general principles, to be conservative?

> It's a fairly obscure case because the inode has to be flushed
> and reloaded in less than a second (so not likely to trigger
> often in practice) 

If that were true, I would agree that it's probably not an issue in
practice.  But unless I misunderstand, in the example I gave, the
flush and reload of foo.o can happen any time between the first and
second builds, which could be arbitrarily far apart.  So I believe
it's a fairly plausible scenario.

Anyway, this isn't the biggest deal in the world.  Maybe I'm wrong
and nobody will ever notice.  But it doesn't seem like a good risk
to take.

Andrew

  parent reply	other threads:[~2002-10-28  6:07 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200210251557.55202.landley@trommello.org.suse.lists.linux.kernel>
2002-10-26  7:53 ` The return of the return of crunch time (2.5 merge candidate list 1.6) Andi Kleen
2002-10-26  8:13   ` Andreas Dilger
     [not found]   ` <20021026190906.GA20571@pimlott.net>
2002-10-27  7:01     ` Andi Kleen
2002-10-27 15:20       ` Andrew Pimlott
2002-10-27 17:57         ` Rob Landley
2002-10-28  4:06           ` Andrew Pimlott
2002-10-28  4:32             ` Andi Kleen
2002-10-28  4:09           ` Andi Kleen
2002-10-28  4:30         ` Andi Kleen
2002-01-15 17:44           ` Pavel Machek
2002-11-08 22:02             ` Andrew Pimlott
2002-10-28  6:03           ` Andrew Pimlott [this message]
2002-10-25 20:57 Rob Landley
2002-10-26  2:42 ` Hans Reiser
2002-10-27 15:11   ` Rob Landley
2002-10-28  0:27     ` Hans Reiser
2002-10-26 15:09 ` Eric W. Biederman

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=20021028060309.GR1557@pimlott.net \
    --to=andrew@pimlott.net \
    --cc=ak@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    /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