From nobody@FreeBSD.org  Sat May 25 18:12:15 2013
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1])
	by hub.freebsd.org (Postfix) with ESMTP id 4A430782
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 25 May 2013 18:12:15 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from oldred.FreeBSD.org (oldred.freebsd.org [8.8.178.121])
	by mx1.freebsd.org (Postfix) with ESMTP id 3C433DDA
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 25 May 2013 18:12:15 +0000 (UTC)
Received: from oldred.FreeBSD.org ([127.0.1.6])
	by oldred.FreeBSD.org (8.14.5/8.14.5) with ESMTP id r4PICEJW010261
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 25 May 2013 18:12:14 GMT
	(envelope-from nobody@oldred.FreeBSD.org)
Received: (from nobody@localhost)
	by oldred.FreeBSD.org (8.14.5/8.14.5/Submit) id r4PICEci010254;
	Sat, 25 May 2013 18:12:14 GMT
	(envelope-from nobody)
Message-Id: <201305251812.r4PICEci010254@oldred.FreeBSD.org>
Date: Sat, 25 May 2013 18:12:14 GMT
From: Garrett Cooper <yaneurabeya@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Race in make release when make system/bootonly target with -j > 1
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         178978
>Category:       conf
>Synopsis:       [build] [patch] Race in make release when make system/bootonly target with -j > 1
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    gjb
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat May 25 18:20:01 UTC 2013
>Closed-Date:    
>Last-Modified:  Sun May 04 04:03:14 UTC 2014
>Originator:     Garrett Cooper
>Release:        10-CURRENT
>Organization:
EMC Isilon
>Environment:
FreeBSD fuji-current.local 10.0-CURRENT FreeBSD 10.0-CURRENT #1 r+4f99885-dirty: Thu May 16 15:52:49 PDT 2013     root@fuji-current.local:/usr/obj/usr/src/sys/FUJI-NOCOMPAT  i386
>Description:
make distribution can fail with -j > 1 if installworld/make hierarchy hasn't completed because multiple targets are being executed in parallel with -j > 1. The error I ran into was the following:

install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
cap_mkdb: /rel//etc/login.conf.db: No such file or directory
install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
*** [distribution] Error code 64

make: stopped in /rel/usr/src/etc
1 error

make: stopped in /rel/usr/src/etc
*** [distribution] Error code 2

make: stopped in /rel/usr/src
1 error

make: stopped in /rel/usr/src
*** [distribution] Error code 2

make: stopped in /rel/usr/src
--- installworld ---
>How-To-Repeat:
cd /usr/src/release; env MAKE_FLAGS=-j16 sh generate-release.sh head /rel/
>Fix:


Patch attached with submission follows:

From c001d588658a8cd6327afbdf52b7bdc982992292 Mon Sep 17 00:00:00 2001
From: Garrett Cooper <yanegomi@gmail.com>
Date: Sat, 25 May 2013 11:05:21 -0700
Subject: [PATCH] Fix a race condition between make distribution and
 installworld

installworld must finish before distribution can complete.

Signed-off-by: Garrett Cooper <yanegomi@gmail.com>
---
 release/Makefile | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/release/Makefile b/release/Makefile
index 975f70e..6932166 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -138,8 +138,10 @@ tests.txz:
 system: packagesystem
 # Install system
 	mkdir -p release
-	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
+.for t in installkernel installworld distribution
+	cd ${WORLDDIR} && ${IMAKE} $t \
 	    DESTDIR=${.OBJDIR}/release WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1
+.endfor
 # Copy distfiles
 	mkdir -p release/usr/freebsd-dist
 	cp *.txz MANIFEST release/usr/freebsd-dist
@@ -157,7 +159,8 @@ system: packagesystem
 bootonly: packagesystem
 # Install system
 	mkdir -p bootonly
-	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
+.for t in installkernel installworld distribution
+	cd ${WORLDDIR} && ${IMAKE} $t \
 	    DESTDIR=${.OBJDIR}/bootonly WITHOUT_AMD=1 WITHOUT_AT=1 \
 	    WITHOUT_BIND_DNSSEC=1 WITHOUT_BIND_ETC=1 WITHOUT_BIND_MTREE=1 \
 	    WITHOUT_BIND_NAMED=1 WITHOUT_GAMES=1 WITHOUT_GROFF=1 \
@@ -165,6 +168,7 @@ bootonly: packagesystem
 	    WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_PROFILE=1 \
 	    WITHOUT_INSTALLIB=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1 \
 	    WITHOUT_KERNEL_SYMBOLS=1
+.endfor
 # Copy manifest only (no distfiles) to get checksums
 	mkdir -p bootonly/usr/freebsd-dist
 	cp MANIFEST bootonly/usr/freebsd-dist
-- 
1.8.2.3



>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->gjb 
Responsible-Changed-By: gjb 
Responsible-Changed-When: Sat May 25 18:34:31 UTC 2013 
Responsible-Changed-Why:  
I will look at it. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=178978 

From: Garrett Cooper <yaneurabeya@gmail.com>
To: bug-followup@FreeBSD.org,
 yaneurabeya@gmail.com
Cc:  
Subject: Re: conf/178978: [patch] Race in make release when make system/bootonly target with -j &gt; 1
Date: Sat, 25 May 2013 12:50:24 -0700

 --Apple-Mail=_A36F8BAC-FABA-45CF-AFC5-03FD1B2A78AD
 Content-Transfer-Encoding: 7bit
 Content-Type: text/plain;
 	charset=us-ascii
 
 	Missed a spot in generate-release.sh ; this patch is complete and works.
 Thanks!
 -Garrett
 
 
 --Apple-Mail=_A36F8BAC-FABA-45CF-AFC5-03FD1B2A78AD
 Content-Disposition: attachment;
 	filename*0=0001-Fix-a-race-condition-between-make-distribution-and-i.patch.;
 	filename*1=txt
 Content-Type: text/plain;
 	name="0001-Fix-a-race-condition-between-make-distribution-and-i.patch.txt"
 Content-Transfer-Encoding: quoted-printable
 
 =46rom 30afc6a82692dff83dc5803f1ff2cefaf331ff5e Mon Sep 17 00:00:00 2001
 From: Garrett Cooper <yanegomi@gmail.com>
 Date: Sat, 25 May 2013 11:05:21 -0700
 Subject: [PATCH] Fix a race condition between make distribution and
  installworld
 
 installworld must finish before distribution can complete.
 
 Signed-off-by: Garrett Cooper <yanegomi@gmail.com>
 ---
  release/Makefile            | 8 ++++++--
  release/generate-release.sh | 4 +++-
  2 files changed, 9 insertions(+), 3 deletions(-)
 
 diff --git a/release/Makefile b/release/Makefile
 index 975f70e..6932166 100644
 --- a/release/Makefile
 +++ b/release/Makefile
 @@ -138,8 +138,10 @@ tests.txz:
  system: packagesystem
  # Install system
  	mkdir -p release
 -	cd ${WORLDDIR} && ${IMAKE} installkernel installworld =
 distribution \
 +.for t in installkernel installworld distribution
 +	cd ${WORLDDIR} && ${IMAKE} $t \
  	    DESTDIR=3D${.OBJDIR}/release WITHOUT_RESCUE=3D1 =
 WITHOUT_KERNEL_SYMBOLS=3D1
 +.endfor
  # Copy distfiles
  	mkdir -p release/usr/freebsd-dist
  	cp *.txz MANIFEST release/usr/freebsd-dist
 @@ -157,7 +159,8 @@ system: packagesystem
  bootonly: packagesystem
  # Install system
  	mkdir -p bootonly
 -	cd ${WORLDDIR} && ${IMAKE} installkernel installworld =
 distribution \
 +.for t in installkernel installworld distribution
 +	cd ${WORLDDIR} && ${IMAKE} $t \
  	    DESTDIR=3D${.OBJDIR}/bootonly WITHOUT_AMD=3D1 WITHOUT_AT=3D1 =
 \
  	    WITHOUT_BIND_DNSSEC=3D1 WITHOUT_BIND_ETC=3D1 =
 WITHOUT_BIND_MTREE=3D1 \
  	    WITHOUT_BIND_NAMED=3D1 WITHOUT_GAMES=3D1 WITHOUT_GROFF=3D1 \
 @@ -165,6 +168,7 @@ bootonly: packagesystem
  	    WITHOUT_NCP=3D1 WITHOUT_TOOLCHAIN=3D1 WITHOUT_PROFILE=3D1 \
  	    WITHOUT_INSTALLIB=3D1 WITHOUT_RESCUE=3D1 WITHOUT_DICT=3D1 \
  	    WITHOUT_KERNEL_SYMBOLS=3D1
 +.endfor
  # Copy manifest only (no distfiles) to get checksums
  	mkdir -p bootonly/usr/freebsd-dist
  	cp MANIFEST bootonly/usr/freebsd-dist
 diff --git a/release/generate-release.sh b/release/generate-release.sh
 index 7d17bfd..8a4c137 100755
 --- a/release/generate-release.sh
 +++ b/release/generate-release.sh
 @@ -81,7 +81,9 @@ fi
  ${SVN_CMD} co ${SVNROOTPORTS}/${BRANCHPORTS} ${CHROOTDIR}/usr/ports
 =20
  ${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src ${WORLD_FLAGS} buildworld
 -${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src installworld distribution =
 DESTDIR=3D${CHROOTDIR}
 +for t in installworld distribution; do
 +	${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src $t =
 DESTDIR=3D${CHROOTDIR}
 +done
  mount -t devfs devfs ${CHROOTDIR}/dev
  trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit
 =20
 --=20
 1.8.2.3
 
 
 --Apple-Mail=_A36F8BAC-FABA-45CF-AFC5-03FD1B2A78AD--
>Unformatted:
