Re: [PATCH v5 2/4] scripts/jobserver-exec: propagate child exit status
From: Nicolas Schier
Date: Sat Jun 13 2026 - 13:42:29 EST
On Wed, May 27, 2026 at 08:32:18PM +0100, Daniel Golle wrote:
> main() called JobserverExec().run() and discarded its return value,
> then the script exited with the implicit status 0. As a result, any
> Makefile that wired a build step through jobserver-exec saw the step
> silently succeed even when the wrapped command had failed.
>
> Two in-tree callers were affected:
>
> Documentation/devicetree/bindings/Makefile
> cmd_chk_style runs a python checker via jobserver-exec and uses
> "&& touch $@ || true" so failures leave the stamp file untouched
> and the next make rerun reports them again. The swallowed exit
> code made the stamp file get created even on failure, caching the
> failed run and hiding the reported issues until the inputs change.
>
> scripts/Makefile.vmlinux_o
> cmd_gen_initcalls_lds runs scripts/generate_initcall_order.pl via
> jobserver-exec; a perl failure was masked by the wrapper.
>
> Return the subprocess exit code from main() and pass it to sys.exit()
> so the wrapped command's status reaches make.
>
> Signed-off-by: Daniel Golle <daniel@xxxxxxxxxxxxxx>
> ---
> v5: new patch; prereq for chk_style in 3/4 so style failures
> leave the stamp file untouched instead of being cached
>
> scripts/jobserver-exec | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/jobserver-exec b/scripts/jobserver-exec
> index 758e947a6fb9..21b319e6c9a5 100755
> --- a/scripts/jobserver-exec
> +++ b/scripts/jobserver-exec
> @@ -28,8 +28,8 @@ def main():
> sys.exit("usage: " + name +" command [args ...]\n" + __doc__)
>
> with JobserverExec() as jobserver:
> - jobserver.run(sys.argv[1:])
> + return jobserver.run(sys.argv[1:])
>
>
> if __name__ == "__main__":
> - main()
> + sys.exit(main())
> --
> 2.54.0
Good catch, thanks!
For kbuild:
Reviewed-by: Nicolas Schier <nsc@xxxxxxxxxx>
--
Nicolas