From 9628714bcbe1c15cde393acc201d816dc8d1becc Mon Sep 17 00:00:00 2001 From: bdrewery Date: Tue, 25 Jul 2017 00:12:48 +0000 Subject: [PATCH] cleandir: Fix ESTALE errors from parallel removals. This fixes 'make cleandir' to use the same ordering as 'make cleanobj'. Meaning that SUBDIR will be recursed before the current directory is handled. This avoids an 'rm -rf /usr/obj/usr/src/lib/libc' while a child 'rm -rf /usr/obj/usr/src/lib/libc/tests' is being ran next, or even removing the current directory and then recursing into a child and using the 'missing OBJDIR' logic to remove files rather than the directory. The most ideal ordering here would be for 'cleanobj' and 'cleandir' to simply remove the .OBJDIR and then not recurse at all. This is only safe if it is guaranteed that all children directories have no orphaned files in their source checkout and are only using obj directories. This is usually safe from the top-level build targets and when using WITH_AUTO_OBJ. Improving the build for those cases is coming. Reported by: cperciva, scottl X-MFC-With: r321427 MFC after: 2 weeks Sponsored by: Dell EMC Isilon --- share/mk/bsd.obj.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/mk/bsd.obj.mk b/share/mk/bsd.obj.mk index 1ce59964310..c9b099b8688 100644 --- a/share/mk/bsd.obj.mk +++ b/share/mk/bsd.obj.mk @@ -183,10 +183,10 @@ clean: .endif .ORDER: clean all -cleandir: cleanobj - .include +cleandir: .WAIT cleanobj + .if make(destroy*) && defined(OBJROOT) # this (rm -rf objdir) is much faster and more reliable than cleaning. -- 2.45.0