packages/pkg-download.mk: fix file locking over NFS
authorMaxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
Thu, 4 Jun 2020 20:14:26 +0000 (16:14 -0400)
committerYann E. MORIN <yann.morin.1998@free.fr>
Thu, 25 Jun 2020 20:12:24 +0000 (22:12 +0200)
BSD style locks such as implemented by flock are translated to POSIX
advisory file locks (implemented by the fcntl system call on Linux).  It
is not possible to lock a directory using POSIX advisory file locks.
Hence, the lock strategy used by Buildroot doesn't work when used over
NFS.

Using flock on a simple file works correctly though, so use a '.lock'
file inside the download directory instead. If the lockfile does not
exist, flock will create it (in a race-free fashion).

Tested using NFS v4.2 and Linux 5.4.43.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
[yann.morin.1998@free.fr:
  - slightly expand commit log about creation of the lockfile
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
package/pkg-download.mk

index de619ba90a8576e1647668364f163e64f5ae14f7..951d2fb5549b2adf111458c402f0211ce271bda1 100644 (file)
@@ -99,7 +99,7 @@ endif
 
 define DOWNLOAD
        $(Q)mkdir -p $($(2)_DL_DIR)
-       $(Q)$(EXTRA_ENV) flock $($(2)_DL_DIR)/ $(DL_WRAPPER) \
+       $(Q)$(EXTRA_ENV) flock $($(2)_DL_DIR)/.lock $(DL_WRAPPER) \
                -c '$($(2)_DL_VERSION)' \
                -d '$($(2)_DL_DIR)' \
                -D '$(DL_DIR)' \