Received: by 2002:a05:6a10:6006:0:0:0:0 with SMTP id w6csp208061pxa; Wed, 26 Aug 2020 23:10:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxu7WuvbWGi5jILPhs6ht/EJESF7vqHwqnscP9FIV+NVt/LnGWsbYRpQOoYjx6K3XiU6R3v X-Received: by 2002:a17:906:e13:: with SMTP id l19mr18779459eji.545.1598508630230; Wed, 26 Aug 2020 23:10:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598508630; cv=none; d=google.com; s=arc-20160816; b=a0o+ju0g1w8EBFmdB+UVPxYeD9NlLMmivLDvglpykwG1l9zCN2pHjSQSeQUyDCAmn7 WfO5RDnFkpI+gyDv2r+DdUqFRmHG1wE9AfFbfHKdUfb7YFDecGqs4rq9ZYStrM1nrLG1 TfZ7JNj6HMBFFhhE870daH5iFm7RE36etNa77pDO4ZuVZbN2Niey/7RB7Qw0H1T2FkMM jJdgf5y+oBPXdpYS6RDtGaXPf1igsScWucX6iARBrRABU8h7BnNb8XboeClnW35HkzbH lWlqNHgcBwuQ7G4ZXpnqUuPZXlgk993phIiKa8wLLbPEZNPd1vjV6I7oTGvOql9xPgaR MAEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=I7U/5qhA694RjZM2OW+xmuQjQNA+7fdpq4xzOUjoUlE=; b=ZonAXxYW1qeiaXq4Y5VTOCnCsmH2GMuiww5QzjUN+cLI7SfEvRnLryuY4ZG5qKg6WM 9zN/ZKPAZiABkS3MYF88Xa4ImLeyysM832Y98zhhE470Qc2rESNh8OPLOgLzmDycMG1L bPwLcJ8mK7paYr50gZWg/+eWwNMAm2XVq6uIA5AklSBDHgjDys/OUNE7hMudRQWaEiZz jtNe6jyh3uCfgmeaKPYfvxHx5Kcj/BKKjbpu+pxDvYziQxMYsGlBFh5X8taLT1U71y3i LMGSy6yxNQxQ0/E1GCJOUN/TgJb21ETaddMtGiT5MlCk6pWS1f2bnwQSmUhYLjiwF2aF /S5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=falzX6nK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v13si1128732edl.376.2020.08.26.23.10.07; Wed, 26 Aug 2020 23:10:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=falzX6nK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726266AbgH0GJW (ORCPT + 99 others); Thu, 27 Aug 2020 02:09:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726123AbgH0GJT (ORCPT ); Thu, 27 Aug 2020 02:09:19 -0400 Received: from mail-pj1-x1041.google.com (mail-pj1-x1041.google.com [IPv6:2607:f8b0:4864:20::1041]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 59A76C061249 for ; Wed, 26 Aug 2020 23:09:19 -0700 (PDT) Received: by mail-pj1-x1041.google.com with SMTP id q1so2052631pjd.1 for ; Wed, 26 Aug 2020 23:09:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=I7U/5qhA694RjZM2OW+xmuQjQNA+7fdpq4xzOUjoUlE=; b=falzX6nK15X4RByLUDfyCCnor91K34PriQeHLBm4zJE4VFeW4GTx3T4VPHN3CCe7Ot X+Qd8CvKb1/YLOCF/xazj8c/qwC89URldGi7L8BSwugFpb27ERJgsIfSpF9zedepvrnO INwAi5pQrjYQxapJUAEG76ZvIzxTzdNZenJAK+3+eBADzpVZXkYcq7Zq27np3W89v3BG LjTIric4FJiJfOI864SmAQiIIzTfRR7W33dBY0hSxhFefH1uiSC6xKoGExa3tAgOm8XX hot/PokUBUKeuPDbSzzTT/iTpia+Sq4+J8C/xh12YeW8yomDhF5monVzP7uDj9Sqg8kO aeZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=I7U/5qhA694RjZM2OW+xmuQjQNA+7fdpq4xzOUjoUlE=; b=ehv/TpvXt/16OK4roONGhh9SiGWdmQATnHzY9ZMH54wlGAdCFBDgGhU07uAzfsIoKr RBTk+iCHZ01sTB0fn9lzIWzoWnlH0vUiGFiNa0BeDPt63ditFIwSml+Hz2+wSac0GePp 8I7CjG0EteMUwXwW/L4hvgsit2d1hQXb6bS1ZsSZl29xIuJsoE5t8ClmVEQNvRHrZTNz EbQgfoO4/jMbsdlMGvnhivhRBFe6J1qHyDxmeAwpipOzr8BU5LehcGyFV1RUZSfo63Jp ZvCNUT8ZocNcEGTjm0ioY9eVtM21qv2fBkLXfL7HTcCPmQhqnBmQ0Ap+0iC5qmc6QT1L AZBw== X-Gm-Message-State: AOAM533jmLXep/l1ljlFunyauCXcRyQlLYjc5xOcljfo/d34tlLMuMbp ua3QqZ8oAB8686aeb1PWZ8I= X-Received: by 2002:a17:90b:1b47:: with SMTP id nv7mr9010403pjb.128.1598508558805; Wed, 26 Aug 2020 23:09:18 -0700 (PDT) Received: from builder-PowerEdge-R730xd.mioffice.cn ([43.224.245.179]) by smtp.gmail.com with ESMTPSA id u123sm1219581pfb.209.2020.08.26.23.09.16 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 26 Aug 2020 23:09:18 -0700 (PDT) From: Qianli Zhao To: tj@kernel.org, jiangshanlai@gmail.com, dan.carpenter@oracle.com, Markus.Elfring@web.de Cc: linux-kernel@vger.kernel.org, zhaoqianli@xiaomi.com Subject: [PATCH v4] workqueue: Warn when work flush own workqueue Date: Thu, 27 Aug 2020 14:09:11 +0800 Message-Id: <4c1287b0881e780368623314348f704bd43e9bd2.1598507105.git.zhaoqianli@xiaomi.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Qianli Zhao If a workqueue flushes itself then that will lead to a deadlock. Print a warning and a stack trace when this happens. crash> ps 10856 PID PPID CPU TASK ST COMM 10856 2 2 ffffffc873428080 UN [kworker/u16:15] crash> bt 10856 PID: 10856 TASK: ffffffc873428080 CPU: 2 COMMAND: "kworker/u16:15" #0 [ffffff80270cb9a0] __switch_to at ffffff99bba8533c #1 [ffffff80270cba30] __schedule at ffffff99bcda18dc #2 [ffffff80270cba50] schedule at ffffff99bcda1cdc #3 [ffffff80270cbaf0] schedule_timeout at ffffff99bcda6674 #4 [ffffff80270cbb70] wait_for_common at ffffff99bcda2c68 #5 [ffffff80270cbb80] wait_for_completion at ffffff99bcda2b60 #6 [ffffff80270cbc30] flush_workqueue at ffffff99bbad7a60 #7 [ffffff80270cbc90] drain_workqueue at ffffff99bbad80fc #8 [ffffff80270cbcb0] destroy_workqueue at ffffff99bbad92f8 #9 [ffffff80270cbda0] dfc_svc_init at ffffff99bbfbfb6c #10 [ffffff80270cbdf0] process_one_work at ffffff99bbadc478 #11 [ffffff80270cbe50] worker_thread at ffffff99bbadc9dc #12 [ffffff80270cbeb0] kthread at ffffff99bbae1f84 Reported-by: kernel test robot Signed-off-by: Qianli Zhao --- Changes in V4: - Fix an error that when different work item used same workqueue in flush_work, patch will trigger WARNING incorrectly, reported-by "kernel test robot " Changes in V3: - update changelog - update comment Changes in V2: - update changelog - update comment kernel/workqueue.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index c41c3c1..6a8a4e0 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -2585,6 +2585,7 @@ static int rescuer_thread(void *__rescuer) * @target_work: work item being flushed (NULL for workqueue flushes) * * %current is trying to flush the whole @target_wq or @target_work on it. + * If a work queue flushes itself, that will lead to a deadlock. * If @target_wq doesn't have %WQ_MEM_RECLAIM, verify that %current is not * reclaiming memory or running on a workqueue which doesn't have * %WQ_MEM_RECLAIM as that can break forward-progress guarantee leading to @@ -2594,13 +2595,17 @@ static void check_flush_dependency(struct workqueue_struct *target_wq, struct work_struct *target_work) { work_func_t target_func = target_work ? target_work->func : NULL; - struct worker *worker; + struct worker *worker = current_wq_worker(); + + WARN_ONCE(worker && worker->current_pwq->wq == target_wq && + worker->task == current && + (target_work ? worker->current_work == target_work : true), + "workqueue: current work function:%ps is flushing own workqueue:%s", + worker->current_func, target_wq->name); if (target_wq->flags & WQ_MEM_RECLAIM) return; - worker = current_wq_worker(); - WARN_ONCE(current->flags & PF_MEMALLOC, "workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%ps", current->pid, current->comm, target_wq->name, target_func); -- 2.7.4