]> git.baikalelectronics.ru Git - kernel.git/commit
scripts/check-local-export: avoid 'wait $!' for process substitution
authorMasahiro Yamada <masahiroy@kernel.org>
Wed, 8 Jun 2022 01:11:00 +0000 (10:11 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 9 Jun 2022 18:47:13 +0000 (03:47 +0900)
commit2e2d8f9230cfb116a58a31bf26f42165cdeae508
tree4730da2d97ddcfaae4224786c2ecb88c7c337d43
parent04a4a7d10d0874945a75c8f3da89bc632d2d27ac
scripts/check-local-export: avoid 'wait $!' for process substitution

Bash 4.4, released in 2016, supports 'wait $!' to check the exit status
of a process substitution, but it seems too new.

Some people using older bash versions (on CentOS 7, Ubuntu 16.04, etc.)
reported an error like this:

  ./scripts/check-local-export: line 54: wait: pid 17328 is not a child of this shell

I used the process substitution to avoid a pipeline, which executes each
command in a subshell. If the while-loop is executed in the subshell
context, variable changes within are lost after the subshell terminates.

Fortunately, Bash 4.2, released in 2011, supports the 'lastpipe' option,
which makes the last element of a pipeline run in the current shell process.

Switch to the pipeline with 'lastpipe' solution, and also set 'pipefail'
to catch errors from ${NM}.

Add the bash requirement to Documentation/process/changes.rst.

Fixes: 4d2523092666 ("kbuild: check static EXPORT_SYMBOL* by script instead of modpost")
Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Reported-by: Wang Yugui <wangyugui@e16-tech.com>
Tested-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Nick Desaulniers <ndesaulniers@google.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Documentation/process/changes.rst
scripts/check-local-export