2018-03-16 10:40 GMT+09:00 Nicolas Pitre <nicolas.pitre@xxxxxxxxxx>: > 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. Ah, you are right. I take my comment back. I am fine with this patch. Thanks! >> > + # 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 -- 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