From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941088AbcHJTB0 (ORCPT ); Wed, 10 Aug 2016 15:01:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48386 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935146AbcHJTBX (ORCPT ); Wed, 10 Aug 2016 15:01:23 -0400 Date: Wed, 10 Aug 2016 12:45:56 +0200 From: Oleg Nesterov To: Bart Van Assche Cc: Peter Zijlstra , "mingo@kernel.org" , Andrew Morton , Johannes Weiner , Neil Brown , Michael Shaver , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] sched: Avoid that __wait_on_bit_lock() hangs Message-ID: <20160810104555.GA3333@redhat.com> References: <20160803213006.GA11712@redhat.com> <17b65ff9-215f-ab74-9f5f-15dbd308d054@sandisk.com> <20160804140938.GB24652@twins.programming.kicks-ass.net> <16207b90-2e6c-fe23-1b4b-3763e5cf0384@sandisk.com> <20160808102213.GA6879@twins.programming.kicks-ass.net> <4091e252-18d9-1795-de63-9fbc678aa6b1@acm.org> <20160808162038.GA25927@redhat.com> <78fafdc1-d4ae-a9a2-169c-1d456b6e6e41@sandisk.com> <20160809171459.GA13840@redhat.com> <3cec7657-caa9-92ca-9f0e-34f073a6ed8c@sandisk.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3cec7657-caa9-92ca-9f0e-34f073a6ed8c@sandisk.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 10 Aug 2016 10:45:59 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/09, Bart Van Assche wrote: > > On 08/09/2016 10:15 AM, Oleg Nesterov wrote: > > > > --- x/kernel/sched/wait.c > > +++ x/kernel/sched/wait.c > > @@ -283,7 +283,7 @@ void abort_exclusive_wait(wait_queue_hea > > if (!list_empty(&wait->task_list)) > > list_del_init(&wait->task_list); > > else if (waitqueue_active(q)) > > - __wake_up_locked_key(q, mode, key); > > + __wake_up_locked_key(q, TASK_NORMAL, key); > > spin_unlock_irqrestore(&q->lock, flags); > > } > > EXPORT_SYMBOL(abort_exclusive_wait); > > Hello Oleg, > > That patch looks interesting to me. And I'll redo/resend it, __wake_up_locked_key(mode) is simply wrong I think. But it can't affect lock_page() because TASK_KILLABLE includes TASK_UNINTERRUPTIBLE and we do not have lock_page_interruptible(). > Unfortunately even with that patch > applied I still see lockups. Thanks. I hoped this change can fix some another exclusive wait... OK. Could you try another debugging patch below? Oleg. --- diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index e5a3244..9d5f892 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -711,6 +711,15 @@ static inline int page_has_private(struct page *page) return !!(page->flags & PAGE_FLAGS_PRIVATE); } +void unlock_page(struct page *page); +static inline void __ClearPageLocked_x(struct page *page) +{ + if (PageLocked(compound_head(page))) + unlock_page(page); +} + +#define __ClearPageLocked(page) __ClearPageLocked_x(page) + #undef PF_ANY #undef PF_HEAD #undef PF_NO_TAIL