From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933484AbcJZPoS (ORCPT ); Wed, 26 Oct 2016 11:44:18 -0400 Received: from mail-it0-f54.google.com ([209.85.214.54]:38688 "EHLO mail-it0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932173AbcJZPoR (ORCPT ); Wed, 26 Oct 2016 11:44:17 -0400 MIME-Version: 1.0 In-Reply-To: <20161026141834.GB6893@redhat.com> References: <20161025182742.10486-1-roman.penyaev@profitbricks.com> <20161026141834.GB6893@redhat.com> From: Roman Penyaev Date: Wed, 26 Oct 2016 17:43:55 +0200 Message-ID: Subject: Re: [PATCH v4 1/1] workqueue: ignore dead tasks in a workqueue sleep hook To: Oleg Nesterov Cc: Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Tejun Heo , linux-kernel@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 26, 2016 at 4:18 PM, Oleg Nesterov wrote: > On 10/25, Roman Pen wrote: >> >> void wq_worker_waking_up(struct task_struct *task, int cpu) >> { >> - struct worker *worker = kthread_data(task); >> + struct worker *worker; >> + >> + if (task->flags & PF_EXITING) { >> + /* >> + * Careful here, t->vfork_done is zeroed out for >> + * almost dead tasks, do not touch kthread_data(). >> + */ >> + return; >> + } >> + >> + worker = kthread_data(task); >> >> if (!(worker->flags & WORKER_NOT_RUNNING)) { >> WARN_ON_ONCE(worker->pool->cpu != cpu); >> @@ -875,9 +885,19 @@ void wq_worker_waking_up(struct task_struct *task, int cpu) >> */ >> struct task_struct *wq_worker_sleeping(struct task_struct *task) >> { >> - struct worker *worker = kthread_data(task), *to_wakeup = NULL; >> + struct worker *worker, *to_wakeup = NULL; >> struct worker_pool *pool; >> >> + if (task->flags & PF_EXITING) { >> + /* >> + * Careful here, t->vfork_done is zeroed out for >> + * almost dead tasks, do not touch kthread_data(). >> + */ >> + return NULL; >> + } >> + >> + worker = kthread_data(task); >> + > > Please see the patch I send a minute ago. With that patch we do not need > this fix, kthread_data() no longer uses ->vfork_done. Perfect. Thanks. Oleg, could you please add me to CC when you finally send a patch. -- Roman