build: install-dtb: fix race condition when copying dtb
authorYousong Zhou <yszhou4tech@gmail.com>
Tue, 10 Sep 2019 13:40:43 +0000 (13:40 +0000)
committerYousong Zhou <yszhou4tech@gmail.com>
Sun, 15 Sep 2019 14:58:43 +0000 (14:58 +0000)
Currently for at91 target, Build/install-dtb can be triggered concurrently for
multiple different TARGET_FILESYSTEMS, cp command can fail when the
target file is already open exclusively by other cp process

[ -f /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/at91sam9263ek-uImage -a -f /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/root.ubifs+fs=-m_2048_-e_126KiB_-c_2048+pkg=68b329da ]
[ -f /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/at91sam9263ek-uImage -a -f /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/root.ext4+pkg=68b329da ]
cp -fpR /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/linux-4.14.141/arch/arm/boot/dts/at91sam9263ek.dtb /builder/shared-workdir/build/bin/targets/at91/sam9x/openwrt-at91-sam9x-at91sam9263ek.dtb;
cp -fpR /builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/linux-4.14.141/arch/arm/boot/dts/at91sam9263ek.dtb /builder/shared-workdir/build/bin/targets/at91/sam9x/openwrt-at91-sam9x-at91sam9263ek.dtb;
cp: cannot create regular file '/builder/shared-workdir/build/bin/targets/at91/sam9x/openwrt-at91-sam9x-at91sam9263ek.dtb': File exists
Makefile:87: recipe for target '/builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/tmp/openwrt-at91-sam9x-at91sam9263ek-ubifs-dtb' failed
make[4]: *** [/builder/shared-workdir/build/build_dir/target-arm_arm926ej-s_musl_eabi/linux-at91_sam9x/tmp/openwrt-at91-sam9x-at91sam9263ek-ubifs-dtb] Error 1

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
include/image-commands.mk

index 89c17aec5b4785a54c6da87e28bf4f640972e4a3..1d0aed1918f53199357512167ba1b19968c0731c 100644 (file)
@@ -136,10 +136,13 @@ define Build/append-dtb
 endef
 
 define Build/install-dtb
-       $(foreach dts,$(DEVICE_DTS), \
-               $(CP) \
-                       $(DTS_DIR)/$(dts).dtb \
-                       $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \
+       $(call locked, \
+               $(foreach dts,$(DEVICE_DTS), \
+                       $(CP) \
+                               $(DTS_DIR)/$(dts).dtb \
+                               $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \
+               ), \
+               install-dtb-$(IMG_PREFIX) \
        )
 endef