Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp3896358rdb; Mon, 11 Dec 2023 03:22:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IEOcFKkNrtPg4dat5R62MU1Rta6s8FjeP/4L5S3l01Qf4ZlLVCS07HyItboDBZuXrPczkFP X-Received: by 2002:a50:d658:0:b0:54b:53f0:2696 with SMTP id c24-20020a50d658000000b0054b53f02696mr2666254edj.30.1702293742303; Mon, 11 Dec 2023 03:22:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702293742; cv=none; d=google.com; s=arc-20160816; b=L36r+xdQf9/Jq4HN2Iyw0iBfQZ5JrvcH8n/gJzSe/15M73DWPjhU4CS2gr1IjG0M3z cYIGn6LsD6ZehtaU7fEf9jej10E6SBMd30JvbDpqyMMHTgOt1UO8yD5xPvdlqzkp4c3O JL2yZlb6vaYD/IKx/ku2EhNGOJhrsF0DqWHHfcHTtT0KvfJzEo1cKmaQf0uvzzmYLw9K 8szk8gOIt+Kh0x+u5YeuKj+tnN7k0t+ErJW2x05lkaXKkNNJN8aRb6ldLlGdQrgGTFnB 9qbWwshHME0Mq24An72C9YdZ6XZmwd/8vs3cbEvmXCV5Oxo0wg8ayoNHw6tXi8nS9vmT Y3/Q== 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:message-id:date:subject:cc:to :from; bh=DtENEzl3N8gVB1VpaISmVgQEBuHF4EOX97eYXmUi1yo=; fh=0YRSAtnrSRvhtzUzSfhpD62rtNa0OOsDCBO4xMqK++A=; b=Qe2kfsUXctiuA8KbpMZAvccVUmm0jXgk8qSQL1Ju5z0ryn7F7Dhr5KtlTI4TytOaaj MqJFwskLeQfp8vJV+d63mEveq6qFR4A7ZYvcvOMN7HDcqDULckEpDumWYzbyj/dCnhcJ P29jLW+Ug/UxbNoxxuF/4Wf2f3DH+FT+uvVNHSdOKyOkq3QteTZcWWYTh15yPfRtVWJd yCxBew53hWuA1NW6N2Kz3M5R57hSIt6+x6+09l4BFtqmS30D05Fq/IUH+csLmvdSeddp PigPMdrGd0bbtSEL0TMhI7ycYQaqu26gBQ6kCWjtVsqbSmx8kicQDQ6OKNBgARVG7As1 eEaA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-ext4+bounces-356-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-ext4+bounces-356-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id t28-20020a50d71c000000b005491339b744si3741985edi.110.2023.12.11.03.22.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 03:22:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-ext4+bounces-356-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-ext4+bounces-356-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-ext4+bounces-356-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.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 am.mirrors.kernel.org (Postfix) with ESMTPS id 1049F1F2111B for ; Mon, 11 Dec 2023 11:22:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D705D364C0; Mon, 11 Dec 2023 11:22:16 +0000 (UTC) X-Original-To: linux-ext4@vger.kernel.org Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5802FAC; Mon, 11 Dec 2023 03:22:12 -0800 (PST) Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4SpfTm691yzsRjx; Mon, 11 Dec 2023 19:22:04 +0800 (CST) Received: from canpemm500010.china.huawei.com (unknown [7.192.105.118]) by mail.maildlp.com (Postfix) with ESMTPS id 2995918005A; Mon, 11 Dec 2023 19:22:10 +0800 (CST) Received: from huawei.com (10.175.127.227) by canpemm500010.china.huawei.com (7.192.105.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 11 Dec 2023 19:22:09 +0800 From: Ye Bin To: , , CC: , , Ye Bin Subject: [PATCH] jbd2: fix soft lockup in journal_finish_inode_data_buffers() Date: Mon, 11 Dec 2023 19:25:44 +0800 Message-ID: <20231211112544.3879780-1-yebin10@huawei.com> X-Mailer: git-send-email 2.31.1 Precedence: bulk X-Mailing-List: linux-ext4@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To canpemm500010.china.huawei.com (7.192.105.118) There's issue when do io test: WARN: soft lockup - CPU#45 stuck for 11s! [jbd2/dm-2-8:4170] CPU: 45 PID: 4170 Comm: jbd2/dm-2-8 Kdump: loaded Tainted: G OE Call trace: dump_backtrace+0x0/0x1a0 show_stack+0x24/0x30 dump_stack+0xb0/0x100 watchdog_timer_fn+0x254/0x3f8 __hrtimer_run_queues+0x11c/0x380 hrtimer_interrupt+0xfc/0x2f8 arch_timer_handler_phys+0x38/0x58 handle_percpu_devid_irq+0x90/0x248 generic_handle_irq+0x3c/0x58 __handle_domain_irq+0x68/0xc0 gic_handle_irq+0x90/0x320 el1_irq+0xcc/0x180 queued_spin_lock_slowpath+0x1d8/0x320 jbd2_journal_commit_transaction+0x10f4/0x1c78 [jbd2] kjournald2+0xec/0x2f0 [jbd2] kthread+0x134/0x138 ret_from_fork+0x10/0x18 Analyzed informations from vmcore as follows: (1) There are about 5k+ jbd2_inode in 'commit_transaction->t_inode_list'; (2) Now is processing the 855th jbd2_inode; (3) JBD2 task has TIF_NEED_RESCHED flag; (4) There's no pags in address_space around the 855th jbd2_inode; (5) There are some process is doing drop caches; (6) Mounted with 'nodioread_nolock' option; (7) 128 CPUs; According to informations from vmcore we know 'journal->j_list_lock' spin lock competition is fierce. So journal_finish_inode_data_buffers() maybe process slowly. Theoretically, there is scheduling point in the filemap_fdatawait_range_keep_errors(). However, if inode's address_space has no pages which taged with PAGECACHE_TAG_WRITEBACK, will not call cond_resched(). So may lead to soft lockup. journal_finish_inode_data_buffers filemap_fdatawait_range_keep_errors __filemap_fdatawait_range while (index <= end) nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end, PAGECACHE_TAG_WRITEBACK); if (!nr_pages) break; --> If 'nr_pages' is equal zero will break, then will not call cond_resched() for (i = 0; i < nr_pages; i++) wait_on_page_writeback(page); cond_resched(); To solve above issue, add scheduling point in the journal_finish_inode_data_buffers(); Signed-off-by: Ye Bin --- fs/jbd2/commit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 9bdb377a348f..5e122586e06e 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -270,6 +270,7 @@ static int journal_finish_inode_data_buffers(journal_t *journal, if (!ret) ret = err; } + cond_resched(); spin_lock(&journal->j_list_lock); jinode->i_flags &= ~JI_COMMIT_RUNNING; smp_mb(); -- 2.31.1