The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after ark-5.14 ------> commit 41f2e597d01945a84b951a1bcdf5262fe83db13f Author: Kirill Tkhai <ktk...@virtuozzo.com> Date: Fri Sep 24 14:49:28 2021 +0300
kernel: Account nr_zombie and nr_dead Extracted from "Initial patch". Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com> https://jira.sw.ru/browse/PSBM-133986 (cherry picked from commit b097bc8d02100cc6c8fa55433fc7a059b04c37fb) Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalit...@virtuozzo.com> --- include/linux/sched.h | 3 +++ kernel/exit.c | 14 ++++++++++++++ kernel/fork.c | 1 + 3 files changed, 18 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 7d8d66996ac6..3d67bb65bf77 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -219,6 +219,9 @@ struct ve_struct; /* Task command name length: */ #define TASK_COMM_LEN 16 +extern atomic_t nr_dead; +extern unsigned long nr_zombie; + extern void scheduler_tick(void); #define MAX_SCHEDULE_TIMEOUT LONG_MAX diff --git a/kernel/exit.c b/kernel/exit.c index 9a89e7f36acb..c53bc727d01e 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -69,6 +69,12 @@ #include <asm/unistd.h> #include <asm/mmu_context.h> +unsigned long nr_zombie = 0; /* protected by tasklist_lock */ +EXPORT_SYMBOL(nr_zombie); + +atomic_t nr_dead = ATOMIC_INIT(0); +EXPORT_SYMBOL(nr_dead); + static void __unhash_process(struct task_struct *p, bool group_dead) { nr_threads--; @@ -197,6 +203,8 @@ void release_task(struct task_struct *p) ptrace_release_task(p); thread_pid = get_pid(p->thread_pid); __exit_signal(p); + nr_zombie--; + atomic_inc(&nr_dead); /* * If we are the last non-leader member of the thread @@ -689,6 +697,12 @@ static void exit_notify(struct task_struct *tsk, int group_dead) list_add(&tsk->ptrace_entry, &dead); } + /* + * Increment nr_zombie even in case of EXIT_DEAD as + * release_task() below expects that. + */ + nr_zombie++; + /* mt-exec, de_thread() is waiting for group leader */ if (unlikely(tsk->signal->notify_count < 0)) wake_up_process(tsk->signal->group_exit_task); diff --git a/kernel/fork.c b/kernel/fork.c index 44f4c2d83763..578635d75959 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -744,6 +744,7 @@ void __put_task_struct(struct task_struct *tsk) put_signal_struct(tsk->signal); sched_core_free(tsk); + atomic_dec(&nr_dead); if (!profile_handoff_task(tsk)) free_task(tsk); } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel