Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2082066imu; Wed, 28 Nov 2018 22:03:56 -0800 (PST) X-Google-Smtp-Source: AFSGD/W7QYyWwSn0Wyzsy69ozddz3nsbvoXP0Ab13JU9Lc6jiF2smDIk8zwcMQwo2Pc2vLM84ddO X-Received: by 2002:a62:a510:: with SMTP id v16mr210709pfm.18.1543471436279; Wed, 28 Nov 2018 22:03:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543471436; cv=none; d=google.com; s=arc-20160816; b=T8B333zxpUnM0oNVLvEBvYjgijXbB97SW9WJyHU/Uv9YaD6rQQAptjpzdSK0LgvgzV CPWkmcWYbvY0v0X7bWkTA3KpSyEFgGzfkJun2yAbr2PbHYkC+F69FI/gDr8sPCbW+7Cr RAAh41JlGXyAwL2EOQJeakVA7N3Exy4hMi+cIeKNL5Xwvg8dUlNK+QAOHTGyt8G1wbp9 DqSheiTEc1k2FCLb438mi8XHBFvKgAsfo6/qJHZ9g4QLO3jeI+vH7g99T+fM8BkSkkv9 ff9YWzaIQw4Wb6pDWf1uPzvpKSdghjo7EzRjNOcToGtW6tx+WKLpk7ILogw7boU2SBC5 GUKQ== 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=6mryan4Bok9Qg21jQLn/8trXCgg4kHN7Q1Zw2YkBGaM=; b=PK3YPaPlyngsPV3UlfSbgwNa7p93uZV0OuNr35/5vbVnc8vey8MaNv/mXQ6xbjcKYT YfozrAXyULpyRMccwn4ybbhaO4+Vfp9PqHO1RgmFpi5TJmXeLq50EDCsiChM11QB+lbM Whs9rSoZgGs7T+940J7RyrGJAH5XgEsoouOxfBYdlGh9F3d1aMSZhWwfj8+mIEvzZ6iZ m5FDaAFGOouDxZfnG+TiXQyPz71GwdIxCjxtXt6sFyEcRa5voRuuksKLl0E4Q+Xcj0B1 77FAaF3uPU12Trc7ovVC8khZgGn4j4yudwYZ9xaI+nPxa7nhE8N8tvwIJtduuSAEWc5Q pagQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Q8dhGcxF; 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 g7si1107530plt.212.2018.11.28.22.03.41; Wed, 28 Nov 2018 22:03:56 -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=Q8dhGcxF; 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 S1729688AbeK2RGm (ORCPT + 99 others); Thu, 29 Nov 2018 12:06:42 -0500 Received: from mail.kernel.org ([198.145.29.99]:43208 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729641AbeK2RGl (ORCPT ); Thu, 29 Nov 2018 12:06:41 -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 C6258213A2; Thu, 29 Nov 2018 06:02:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543471350; bh=q+QxCI+Fxjshjm62J4/HS3sFKLsxZSYLxI+7C+9iChE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q8dhGcxFK5NODs4iZUCgeNAQ6weYmesqmEt3AANh9mnAAygN+rKCA4xSHTAHV1rem sMTlpX9aNpgXWmBnWRFLtvQtE+m7iR5wY3pfpbKB2AqYodtwvs1YdRHO8bHwL27rUn S1iNIFgkLc81cD6DR6Au/bDQGW7HpiIx7skuC1zM= 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.14 20/35] exec: make de_thread() freezable Date: Thu, 29 Nov 2018 01:00:54 -0500 Message-Id: <20181129060110.159878-20-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181129060110.159878-1-sashal@kernel.org> References: <20181129060110.159878-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 0da4d748b4e6..25c529f46aaa 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include @@ -1079,7 +1080,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); @@ -1107,7 +1108,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