Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2080723imu; Wed, 28 Nov 2018 22:02:14 -0800 (PST) X-Google-Smtp-Source: AFSGD/Vq037YSdsoOzOEfwC9MoJ2bSv702QkNj5CaiF5RyU5YuT1ThebnDKDL3W94x0a82TvGYK5 X-Received: by 2002:a62:37c3:: with SMTP id e186mr169070pfa.251.1543471334572; Wed, 28 Nov 2018 22:02:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543471334; cv=none; d=google.com; s=arc-20160816; b=o0J9dBwtolMEht55OfZOOueZwWuuR5XD5dOEdWEI22dcfYX7dmIJ4QmS0IP4rjzMLB Ako5A3tNY6h2LIeNAi8/niTs0zAI+Jxav3VUy5BqSsD+wtrKSmIGBAZ03Uv2XIm8/ZUI 05dDVSnkmBhRNRr0UsfFS2U3hfVwLQzGi6y1jogOYYpUuygx57lIIGn2uRjNTKP+5Sig 8NCiofFmSaB+Ryzleq//SeZFnFMx1bNxpo663hOcy+uaf6E1aUMgah2tIL3Cl1TClfpG Md+OHwq1fVDwChTd6KiRr+wDPFOF/xrxR3FQyqn3N/Y8YAzG/+2dHhy+RFwAdKc+PfWA I7mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=fsl2vGTJ94AyiFHCIlHpIxHy0oVVPW38SKaDzP6ihBw=; b=BYlrW0IiUHWGthyVT5Pu9Yd5Z0dsLNEPflpAuEIGTQdvjSjOso7jCM5TrwHe2Udihi VSYKt88sWKTk/FxOaUPSmvHkLWcs73FEcWddjXUdHGKzr5r4jD3aTr8TXV/9bWT3ho51 ijcOhTdutJUYHRupcvX4RuipEFEs7K7UB8RIy93d78rJTJAW/3dB7wF5gaKzlPhCljaO nxj5nSQaeBrru9qd/iAE1idFL/JgPJLlZBcUnY6qoRRiw0Tc7DvPVWmAWMWUN7xp3FTI kkl2aUgnbBQPLU3NqQh82GEtEhzfBCtbFj+h3Bu9hJjvc/taY7G0P4z1nAmbZDoApDqp 5kJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CCdORK6U; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d2-v6si1170426pfa.150.2018.11.28.22.02.00; Wed, 28 Nov 2018 22:02:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CCdORK6U; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728786AbeK2RD0 (ORCPT + 99 others); Thu, 29 Nov 2018 12:03:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:37600 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727402AbeK2RDZ (ORCPT ); Thu, 29 Nov 2018 12:03:25 -0500 Received: from sasha-vm.mshome.net (unknown [37.142.5.207]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8627321104; Thu, 29 Nov 2018 05:59:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543471154; bh=e5Nv0J2oHwauCYmFw66YMHAf7Gfp+g+y45/Isxcld2Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CCdORK6UOIIdXfJ0NiD+GnUjouCkuIxO8q0Cj+HUVxLIRgJj8csOgpPnvhVFFtOdb xbJSwW/4FmYlhU1xhxko+UfJu2Elqzkk+iGefSbgcMxqiLf3ahSxp9nUl4i01yZARm +BH9049Ra7qPgQUWhfjSPzeqSWnXnzJnNui8ccb8= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Chanho Min , "Rafael J . Wysocki" , Sasha Levin , linux-fsdevel@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 39/68] exec: make de_thread() freezable Date: Thu, 29 Nov 2018 00:55:30 -0500 Message-Id: <20181129055559.159228-39-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181129055559.159228-1-sashal@kernel.org> References: <20181129055559.159228-1-sashal@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chanho Min [ Upstream commit c22397888f1eed98cd59f0a88f2a5f6925f80e15 ] Suspend fails due to the exec family of functions blocking the freezer. The casue is that de_thread() sleeps in TASK_UNINTERRUPTIBLE waiting for all sub-threads to die, and we have the deadlock if one of them is frozen. This also can occur with the schedule() waiting for the group thread leader to exit if it is frozen. In our machine, it causes freeze timeout as bellows. Freezing of tasks failed after 20.010 seconds (1 tasks refusing to freeze, wq_busy=0): setcpushares-ls D ffffffc00008ed70 0 5817 1483 0x0040000d Call trace: [] __switch_to+0x88/0xa0 [] __schedule+0x1bc/0x720 [] schedule+0x40/0xa8 [] flush_old_exec+0xdc/0x640 [] load_elf_binary+0x2a8/0x1090 [] search_binary_handler+0x9c/0x240 [] load_script+0x20c/0x228 [] search_binary_handler+0x9c/0x240 [] do_execveat_common.isra.14+0x4f8/0x6e8 [] compat_SyS_execve+0x38/0x48 [] el0_svc_naked+0x24/0x28 To fix this, make de_thread() freezable. It looks safe and works fine. Suggested-by: Oleg Nesterov Signed-off-by: Chanho Min Acked-by: Oleg Nesterov Acked-by: Pavel Machek Acked-by: Michal Hocko Signed-off-by: Rafael J. Wysocki Signed-off-by: Sasha Levin --- fs/exec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 1ebf6e5a521d..6da8745857cb 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include @@ -1083,7 +1084,7 @@ static int de_thread(struct task_struct *tsk) while (sig->notify_count) { __set_current_state(TASK_KILLABLE); spin_unlock_irq(lock); - schedule(); + freezable_schedule(); if (unlikely(__fatal_signal_pending(tsk))) goto killed; spin_lock_irq(lock); @@ -1111,7 +1112,7 @@ static int de_thread(struct task_struct *tsk) __set_current_state(TASK_KILLABLE); write_unlock_irq(&tasklist_lock); cgroup_threadgroup_change_end(tsk); - schedule(); + freezable_schedule(); if (unlikely(__fatal_signal_pending(tsk))) goto killed; } -- 2.17.1