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. > + # 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