Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp2125872rdb; Sun, 24 Dec 2023 19:18:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IGLgkRJBijIU4u+vCNd8eAhXXOJkXVgV9SqjkeMHKUcIahpeB0K9o+4nqNApLOQF7b1WEWd X-Received: by 2002:a05:6214:1c8a:b0:67f:b97:f092 with SMTP id ib10-20020a0562141c8a00b0067f0b97f092mr6514739qvb.87.1703474335602; Sun, 24 Dec 2023 19:18:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703474335; cv=none; d=google.com; s=arc-20160816; b=wOPsTMM7iNqMLoV4VOjx4mzynYMjOqRLvTjEQeiUst4uKvie6jQL0PfEEyurepfS6K jr3lXSxq+x6DTPP8nR6xXJfco7+Qtsbop0Cfey2+gatcxK9RysDNW/XnYZZqrmjkZaFM 1rHhiM6RAmf7cCcM7hYuOHbOkqiZU2v5w2SmErcncV8zYXsiWrFLXT/IdPSAX83UWgze bFL/QRqoqilT9bFHkgjU58/UvQLfl9m3z3gst4bMp+yqCRKMvd/qWBCxm4/uL7/my8yR qgyE0g1eQozubisKkHB2xwrqP4s2R4dzskI3AGebgM9P9Zpbc7dA4O7M7TqU/drBiX9C bFlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=QRg48hyh/zPlqk0RFZeKCRb0YrCWvCns/Zy6ikrYLzs=; fh=PkKPX03K3JsyHTes4BQLZMGAFWr/RPontOXNEyUJpL8=; b=H44AaH7ccQxL7Hj98psf7EoNPBaYE6YrZfhx667RKJpVYScHViiaYRXSyGZ0VL41cQ Uw8u4G+n8nbh1NcrNEvI/se/Py6kmFz+trZJEzw5pyVigR1hRc5+4gVEvik6DMa9hJII 8zSvsDyyzWpNy9RINaY2Y5trUXYHnws5E8DhRzBU75axKEQ2SZJP4EyHocoJOYI7tXab XtSJSLWu/Rf/K2kPPafMLOJevjcgAunjU1DaYrjSCzw9A1Jpa0QmGe9/hZT/dw1MViky Tv7yiJrvckEucpXdAfPlTPE5RGBwcu1hkKwoflofako3vX9o0fQjs7m8Jbd4eU9WRTJb UvBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=Oq7B2HaF; spf=pass (google.com: domain of linux-kernel+bounces-10880-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10880-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=windriver.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id x2-20020a0ca882000000b0067f4f89b2c7si9593908qva.190.2023.12.24.19.18.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Dec 2023 19:18:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-10880-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=Oq7B2HaF; spf=pass (google.com: domain of linux-kernel+bounces-10880-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-10880-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=windriver.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4E2C51C209F1 for ; Mon, 25 Dec 2023 03:18:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AD65EA57; Mon, 25 Dec 2023 03:18:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b="Oq7B2HaF" X-Original-To: linux-kernel@vger.kernel.org Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27B3D812 for ; Mon, 25 Dec 2023 03:18:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=windriver.com Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 3BP3BR0l029746; Mon, 25 Dec 2023 03:18:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= PPS06212021; bh=QRg48hyh/zPlqk0RFZeKCRb0YrCWvCns/Zy6ikrYLzs=; b= Oq7B2HaF521WJ7cAzY+ufizj0Z1EEYkcSJh2xO68AljwoEvGL0WURTxcMokPKpQT +mFVIwBo9dzEZ1+DRn7EzAvjmwqz/y+ehyYNhrCffQoWnXVY3FFiwtp3QS2SIj9e BVLvmKZiRgLQ7ujjzFwSGxWQ50A8xzFmjBX/lBA4lJoj+iLdglMsRMKShMj9wsJQ 6/mpzDnefRpr/4vgQirH+4p9UPnK7usMPqUdCpbOscrwanVSnu4RQZNTPTUOw5B6 xd25wlc0yM7HLoz2gAiiWn7KXM1iNpB+X/Xg5jlJricIt0SwHqLG9DLWwmT1G9kM FVumPABkRJjikqZr6/cNYg== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [147.11.82.254]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 3v5mrxsaw1-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 25 Dec 2023 03:18:37 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (147.11.82.252) by ALA-EXCHNG02.corp.ad.wrs.com (147.11.82.254) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Sun, 24 Dec 2023 19:18:40 -0800 Received: from pek-lpd-ccm6.wrs.com (147.11.136.210) by ala-exchng01.corp.ad.wrs.com (147.11.82.252) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Sun, 24 Dec 2023 19:18:39 -0800 From: Lizhi Xu To: CC: , Subject: Re: [syzbot] [reiserfs?] possible deadlock in __run_timers Date: Mon, 25 Dec 2023 11:18:35 +0800 Message-ID: <20231225031835.3191503-1-lizhi.xu@windriver.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <000000000000b26907060cb9f1f5@google.com> References: <000000000000b26907060cb9f1f5@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-ORIG-GUID: OkRV-R29Ga_vrERrZkK8xIFqAWZNvT0g X-Proofpoint-GUID: OkRV-R29Ga_vrERrZkK8xIFqAWZNvT0g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-16_25,2023-11-16_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 spamscore=0 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 mlxlogscore=785 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2311290000 definitions=main-2312250021 #syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 88035e5694a8 diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 2989b57e154a..30427a1f961c 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -941,8 +941,12 @@ static void worker_enter_idle(struct worker *worker) /* idle_list is LIFO */ list_add(&worker->entry, &pool->idle_list); - if (too_many_workers(pool) && !timer_pending(&pool->idle_timer)) + if (too_many_workers(pool) && !timer_pending(&pool->idle_timer)) { + unsigned long flags; + raw_spin_unlock_irqrestore(&pool->lock, flags); mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT); + raw_spin_lock_irqsave(&pool->lock, flags); + } /* Sanity check nr_running. */ WARN_ON_ONCE(pool->nr_workers == pool->nr_idle && pool->nr_running); @@ -2164,6 +2168,7 @@ static struct worker *create_worker(struct worker_pool *pool) struct worker *worker; int id; char id_buf[23]; + unsigned long flags; /* ID is needed to determine kthread name */ id = ida_alloc(&pool->worker_ida, GFP_KERNEL); @@ -2207,7 +2212,7 @@ static struct worker *create_worker(struct worker_pool *pool) worker_attach_to_pool(worker, pool); /* start the newly created worker */ - raw_spin_lock_irq(&pool->lock); + raw_spin_lock_irqsave(&pool->lock, flags); worker->pool->nr_workers++; worker_enter_idle(worker); @@ -2220,7 +2225,7 @@ static struct worker *create_worker(struct worker_pool *pool) */ wake_up_process(worker->task); - raw_spin_unlock_irq(&pool->lock); + raw_spin_unlock_irqrestore(&pool->lock, flags); return worker; @@ -2727,15 +2732,16 @@ static int worker_thread(void *__worker) { struct worker *worker = __worker; struct worker_pool *pool = worker->pool; + unsigned long flags; /* tell the scheduler that this is a workqueue worker */ set_pf_worker(true); woke_up: - raw_spin_lock_irq(&pool->lock); + raw_spin_lock_irqsave(&pool->lock, flags); /* am I supposed to die? */ if (unlikely(worker->flags & WORKER_DIE)) { - raw_spin_unlock_irq(&pool->lock); + raw_spin_unlock_irqsave(&pool->lock, flags); set_pf_worker(false); set_task_comm(worker->task, "kworker/dying"); @@ -2792,7 +2798,7 @@ static int worker_thread(void *__worker) */ worker_enter_idle(worker); __set_current_state(TASK_IDLE); - raw_spin_unlock_irq(&pool->lock); + raw_spin_unlock_irqrestore(&pool->lock, flags); schedule(); goto woke_up; }