Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3129827ybi; Thu, 18 Jul 2019 21:36:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqxa1+naJfAVYgnXy7Q9xHu3Mi8dfhxFv7DZKtOT2vfbw+omPCVZ+HESHsfDh93K5ebDw2Fz X-Received: by 2002:a17:90a:2247:: with SMTP id c65mr53324974pje.24.1563511001374; Thu, 18 Jul 2019 21:36:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563511001; cv=none; d=google.com; s=arc-20160816; b=BwwR+qkhIhBGUUMkiOBvtHXHquUFeFj4JjjsXmPVwRUJ49rm4Gcd39DY6ghqoYLXXm vDTnGpi3yDtuarfCA2ArRtyUS3xHgyxE9n//R/K5m4pcSi/cfJM2fPBsxV0ga5Fviy0x 8wu4kqYpPZMDNDtgeIinx05NmrOIFu0OKdJ2mXWwEWOD6p0NHJ3GUJD3ZVb1JVlY4mtq OJHJInHOoU1d9r/YKT6zFKc2EfGdOZgoKYtj/RfGxQ5o1UbHO1qcq2Dd6Ooz6keXnbhe mD9hihjkc/lqXtmSqOEspAR9mfsrC03wR0bk1oDRiAWTgAbTIVH9GgJg8JW/SE9vzkWV L82g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yzl7qc14VFiD0zAA6kNeSiRqiEteHbmKFUv2LNrwDrc=; b=GBU33FKUIaBizoCL4PE8TXiTWeNiraS+hCSf/Ss+GZctPKEg/tXMltAKHgQ4o/7L0C HtDTfYLM0d+Op6x7pN7gGeE+Fhj1R1rWYBE/Z03dTuq5W1DDK0R00AWyXMzP/YZP2rFh 59MGFVN/c4kLbHKxK1EdWkFLNFvqO3ef2MNRBDoDODZY5y2zaoK9AhyPwpVmxakiFFoN LpX+zS/275e4NG0ZMc7zB0332WRjvCECZ7GfIZ7izsVu9NlJNn+NAsQyhsQDIY5FO5ni YbZsVzpg6X/j+FftnFlk7qqfGt8UUCuEmNu/Lb5GWgC1qQ4HF/6/xv/7EmuwZEEKLhEh P6NA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ml7VersR; 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 t3si476164pfh.218.2019.07.18.21.36.26; Thu, 18 Jul 2019 21:36:41 -0700 (PDT) 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=Ml7VersR; 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 S1730855AbfGSEfY (ORCPT + 99 others); Fri, 19 Jul 2019 00:35:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:33204 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729449AbfGSEB2 (ORCPT ); Fri, 19 Jul 2019 00:01:28 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (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 B653A21851; Fri, 19 Jul 2019 04:01:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563508887; bh=XCD9iVH2VFQCkF776NAHQBSgULYTtbS4COICYJp0DIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ml7VersReUCqZft+LtcmO5TIJmixdPe/Tq5i+ugLuI8y4BAEp85M3fzdEVxsW/xhj baoRQDPjWZxmeFCGCcdZGzPpzAar766V+GbSv+Fh/S+vQ0DOH3K8O5Xe1pW1HzHlYJ EKk2XRYi/RFF4UQbsmBXGXL0tB2d643wU3Ojv3yA= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jackie Liu , syzbot+94324416c485d422fe15@syzkaller.appspotmail.com, Jens Axboe , Sasha Levin , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org Subject: [PATCH AUTOSEL 5.2 138/171] io_uring: fix io_sq_thread_stop running in front of io_sq_thread Date: Thu, 18 Jul 2019 23:56:09 -0400 Message-Id: <20190719035643.14300-138-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190719035643.14300-1-sashal@kernel.org> References: <20190719035643.14300-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jackie Liu [ Upstream commit a4c0b3decb33fb4a2b5ecc6234a50680f0b21e7d ] INFO: task syz-executor.5:8634 blocked for more than 143 seconds. Not tainted 5.2.0-rc5+ #3 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. syz-executor.5 D25632 8634 8224 0x00004004 Call Trace: context_switch kernel/sched/core.c:2818 [inline] __schedule+0x658/0x9e0 kernel/sched/core.c:3445 schedule+0x131/0x1d0 kernel/sched/core.c:3509 schedule_timeout+0x9a/0x2b0 kernel/time/timer.c:1783 do_wait_for_common+0x35e/0x5a0 kernel/sched/completion.c:83 __wait_for_common kernel/sched/completion.c:104 [inline] wait_for_common kernel/sched/completion.c:115 [inline] wait_for_completion+0x47/0x60 kernel/sched/completion.c:136 kthread_stop+0xb4/0x150 kernel/kthread.c:559 io_sq_thread_stop fs/io_uring.c:2252 [inline] io_finish_async fs/io_uring.c:2259 [inline] io_ring_ctx_free fs/io_uring.c:2770 [inline] io_ring_ctx_wait_and_kill+0x268/0x880 fs/io_uring.c:2834 io_uring_release+0x5d/0x70 fs/io_uring.c:2842 __fput+0x2e4/0x740 fs/file_table.c:280 ____fput+0x15/0x20 fs/file_table.c:313 task_work_run+0x17e/0x1b0 kernel/task_work.c:113 tracehook_notify_resume include/linux/tracehook.h:185 [inline] exit_to_usermode_loop arch/x86/entry/common.c:168 [inline] prepare_exit_to_usermode+0x402/0x4f0 arch/x86/entry/common.c:199 syscall_return_slowpath+0x110/0x440 arch/x86/entry/common.c:279 do_syscall_64+0x126/0x140 arch/x86/entry/common.c:304 entry_SYSCALL_64_after_hwframe+0x49/0xbe RIP: 0033:0x412fb1 Code: 80 3b 7c 0f 84 c7 02 00 00 c7 85 d0 00 00 00 00 00 00 00 48 8b 05 cf a6 24 00 49 8b 14 24 41 b9 cb 2a 44 00 48 89 ee 48 89 df <48> 85 c0 4c 0f 45 c8 45 31 c0 31 c9 e8 0e 5b 00 00 85 c0 41 89 c7 RSP: 002b:00007ffe7ee6a180 EFLAGS: 00000293 ORIG_RAX: 0000000000000003 RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000412fb1 RDX: 0000001b2d920000 RSI: 0000000000000000 RDI: 0000000000000003 RBP: 0000000000000001 R08: 00000000f3a3e1f8 R09: 00000000f3a3e1fc R10: 00007ffe7ee6a260 R11: 0000000000000293 R12: 000000000075c9a0 R13: 000000000075c9a0 R14: 0000000000024c00 R15: 000000000075bf2c ============================================= There is an wrong logic, when kthread_park running in front of io_sq_thread. CPU#0 CPU#1 io_sq_thread_stop: int kthread(void *_create): kthread_park() __kthread_parkme(self); <<< Wrong kthread_stop() << wait for self->exited << clear_bit KTHREAD_SHOULD_PARK ret = threadfn(data); | |- io_sq_thread |- kthread_should_park() << false |- schedule() <<< nobody wake up stuck CPU#0 stuck CPU#1 So, use a new variable sqo_thread_started to ensure that io_sq_thread run first, then io_sq_thread_stop. Reported-by: syzbot+94324416c485d422fe15@syzkaller.appspotmail.com Suggested-by: Jens Axboe Signed-off-by: Jackie Liu Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- fs/io_uring.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/io_uring.c b/fs/io_uring.c index 4ef62a45045d..fef2cd44b2ac 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -231,6 +231,7 @@ struct io_ring_ctx { struct task_struct *sqo_thread; /* if using sq thread polling */ struct mm_struct *sqo_mm; wait_queue_head_t sqo_wait; + struct completion sqo_thread_started; struct { /* CQ ring */ @@ -403,6 +404,7 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p) ctx->flags = p->flags; init_waitqueue_head(&ctx->cq_wait); init_completion(&ctx->ctx_done); + init_completion(&ctx->sqo_thread_started); mutex_init(&ctx->uring_lock); init_waitqueue_head(&ctx->wait); for (i = 0; i < ARRAY_SIZE(ctx->pending_async); i++) { @@ -2009,6 +2011,8 @@ static int io_sq_thread(void *data) unsigned inflight; unsigned long timeout; + complete(&ctx->sqo_thread_started); + old_fs = get_fs(); set_fs(USER_DS); @@ -2243,6 +2247,7 @@ static int io_sqe_files_unregister(struct io_ring_ctx *ctx) static void io_sq_thread_stop(struct io_ring_ctx *ctx) { if (ctx->sqo_thread) { + wait_for_completion(&ctx->sqo_thread_started); /* * The park is a bit of a work-around, without it we get * warning spews on shutdown with SQPOLL set and affinity -- 2.20.1