Re: Intermittent build failure with TRIM_UNUSED_KSYMS and related problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 16 Mar 2018, Masahiro Yamada wrote:

> 2018-03-16 5:56 GMT+09:00 Nicolas Pitre <nicolas.pitre@xxxxxxxxxx>:
> > ----- >8
> > Subject: [PATCH] kbuild: make scripts/adjust_autoksyms.sh robust against timestamp races
> >
> > Some filesystems have timestamps with coarse precision that may allow
> > for a recently built object file to have the same timestamp as the
> > updated time on one of its dependency files. When that happens, the
> > object file doesn't get rebuilt as it should.
> >
> > This is especially the case on filesystems that don't have sub-second
> > time precision, such as ext3 or Ext4 with 128B inodes.
> >
> > Let's prevent that by making sure updated dependency files have a newer
> > timestamp than the first file we created (i.e. autoksyms.h.tmpnew).
> >
> > Reported-by: Thomas Lindroth <thomas.lindroth@xxxxxxxxx>
> > Signed-off-by: Nicolas Pitre <nico@xxxxxxxxxx>
> >
> > diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
> > index 513da1a4a2..d67830e6e3 100755
> > --- a/scripts/adjust_autoksyms.sh
> > +++ b/scripts/adjust_autoksyms.sh
> > @@ -84,6 +84,13 @@ while read sympath; do
> >         depfile="include/config/ksym/${sympath}.h"
> >         mkdir -p "$(dirname "$depfile")"
> >         touch "$depfile"
> 
> Just a nit.
> 
> I think this 'touch' is unnecessary.
> If $depfile does not exist, the '-nt' is evaluated to false,
> so it will be touched inside the while loop anyway.

Though it is more efficient with the first touch up front, as the common 
case requires only 2 stat system calls instead of 4.

> > +       # Filesystems with coarse time precision may create timestamps
> > +       # equal to the one from a file that was very recently built and that
> > +       # needs to be rebuild. Let's guard against that by making sure our
> > +       # dep files are always newer than the first file we created here.
> > +       while [ ! "$depfile" -nt "$new_ksyms_file" ]; do
> > +               touch "$depfile"
> > +       done
> >         echo $((count += 1))
> >  done | tail -1 )
> >  changed=${changed:-0}
> > ----- >8
> 
> 
> -- 
> Best Regards
> Masahiro Yamada
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux