__kill_pgrp_info: simplify the calculation of return value
authorOleg Nesterov <oleg@redhat.com>
Wed, 23 Aug 2023 17:14:55 +0000 (19:14 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Oct 2023 17:41:56 +0000 (10:41 -0700)
No need to calculate/check the "success" variable, we can kill it and update
retval in the main loop unless it is zero.

Link: https://lkml.kernel.org/r/20230823171455.GA12188@redhat.com
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Suggested-by: David Laight <David.Laight@ACULAB.COM>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/signal.c

index 09019017d6690a50e0a6931a20fcfdb6fb15c04b..fc276fc07d87790223f94061cb2f9978eb0ab3dd 100644 (file)
@@ -1471,16 +1471,21 @@ int group_send_sig_info(int sig, struct kernel_siginfo *info,
 int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp)
 {
        struct task_struct *p = NULL;
-       int retval, success;
+       int ret = -ESRCH;
 
-       success = 0;
-       retval = -ESRCH;
        do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
                int err = group_send_sig_info(sig, info, p, PIDTYPE_PGID);
-               success |= !err;
-               retval = err;
+               /*
+                * If group_send_sig_info() succeeds at least once ret
+                * becomes 0 and after that the code below has no effect.
+                * Otherwise we return the last err or -ESRCH if this
+                * process group is empty.
+                */
+               if (ret)
+                       ret = err;
        } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
-       return success ? 0 : retval;
+
+       return ret;
 }
 
 int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid)