From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BC50C433EF for ; Sat, 29 Jan 2022 02:14:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 16E478D0002; Fri, 28 Jan 2022 21:14:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0F6DC6B00D8; Fri, 28 Jan 2022 21:14:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EDA128D0002; Fri, 28 Jan 2022 21:14:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0080.hostedemail.com [216.40.44.80]) by kanga.kvack.org (Postfix) with ESMTP id D77D56B00D7 for ; Fri, 28 Jan 2022 21:14:35 -0500 (EST) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 9AB41181951C5 for ; Sat, 29 Jan 2022 02:14:35 +0000 (UTC) X-FDA: 79081705710.30.9664F5F Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf14.hostedemail.com (Postfix) with ESMTP id 278CD10000C for ; Sat, 29 Jan 2022 02:14:35 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 85E1961631; Sat, 29 Jan 2022 02:14:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6FF79C340E7; Sat, 29 Jan 2022 02:14:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1643422474; bh=YCQ95KpNsXMz2yuDR/o91c1DP7QgFpHDEveRI7BKWh4=; h=Date:From:To:Subject:In-Reply-To:From; b=Nq+4iVdln+CCfld36u863LlNqcOeKWN8RXyR4frz46Tqzj+SxQe6YYPSwPMSv6AcJ GPLv/i0ql/YkoIK/UOgjjeVIdapR6EA1fLkNKcVkIb5ixkZ1BkYUkRf7FLANLJQZHD BysZL3qB4yt4miZW2DABkYC9MEN5VpUBSEC5hML0= Date: Fri, 28 Jan 2022 18:14:32 -0800 From: Andrew Morton To: adilger.kernel@dilger.ca, akpm@linux-foundation.org, gautham.ananthakrishna@oracle.com, gechangwei@live.cn, ghe@suse.com, jlbec@evilplan.org, joseph.qi@linux.alibaba.com, junxiao.bi@oracle.com, linux-mm@kvack.org, mark@fasheh.com, mm-commits@vger.kernel.org, piaojun@huawei.com, saeed.mirzamohammadi@oracle.com, stable@vger.kernel.org, torvalds@linux-foundation.org, tytso@mit.edu Subject: [patch 7/7] ocfs2: fix a deadlock when commit trans Message-ID: <20220129021432.3qLWGCfFF%akpm@linux-foundation.org> In-Reply-To: <20220128181341.2103de95948608a65958ae40@linux-foundation.org> User-Agent: s-nail v14.8.16 X-Rspam-User: nil X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 278CD10000C X-Stat-Signature: rrejqarpqfdp4z35nj9qc95a96zg9edr Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=Nq+4iVdl; dmarc=none; spf=pass (imf14.hostedemail.com: domain of akpm@linux-foundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org X-HE-Tag: 1643422475-669010 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Joseph Qi Subject: ocfs2: fix a deadlock when commit trans commit 6f1b228529ae introduces a regression which can deadlock as follows: Task1: Task2: jbd2_journal_commit_transaction ocfs2_test_bg_bit_allocatable spin_lock(&jh->b_state_lock) jbd_lock_bh_journal_head __jbd2_journal_remove_checkpoint spin_lock(&jh->b_state_lock) jbd2_journal_put_journal_head jbd_lock_bh_journal_head Task1 and Task2 lock bh->b_state and jh->b_state_lock in different order, which finally result in a deadlock. So use jbd2_journal_[grab|put]_journal_head instead in ocfs2_test_bg_bit_allocatable() to fix it. Link: https://lkml.kernel.org/r/20220121071205.100648-3-joseph.qi@linux.alibaba.com Fixes: 6f1b228529ae ("ocfs2: fix race between searching chunks and release journal_head from buffer_head") Signed-off-by: Joseph Qi Reported-by: Gautham Ananthakrishna Reported-by: Saeed Mirzamohammadi Cc: "Theodore Ts'o" Cc: Andreas Dilger Cc: Changwei Ge Cc: Gang He Cc: Joel Becker Cc: Jun Piao Cc: Junxiao Bi Cc: Mark Fasheh Cc: Signed-off-by: Andrew Morton --- fs/ocfs2/suballoc.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) --- a/fs/ocfs2/suballoc.c~ocfs2-fix-a-deadlock-when-commit-trans +++ a/fs/ocfs2/suballoc.c @@ -1251,26 +1251,23 @@ static int ocfs2_test_bg_bit_allocatable { struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; struct journal_head *jh; - int ret = 1; + int ret; if (ocfs2_test_bit(nr, (unsigned long *)bg->bg_bitmap)) return 0; - if (!buffer_jbd(bg_bh)) + jh = jbd2_journal_grab_journal_head(bg_bh); + if (!jh) return 1; - jbd_lock_bh_journal_head(bg_bh); - if (buffer_jbd(bg_bh)) { - jh = bh2jh(bg_bh); - spin_lock(&jh->b_state_lock); - bg = (struct ocfs2_group_desc *) jh->b_committed_data; - if (bg) - ret = !ocfs2_test_bit(nr, (unsigned long *)bg->bg_bitmap); - else - ret = 1; - spin_unlock(&jh->b_state_lock); - } - jbd_unlock_bh_journal_head(bg_bh); + spin_lock(&jh->b_state_lock); + bg = (struct ocfs2_group_desc *) jh->b_committed_data; + if (bg) + ret = !ocfs2_test_bit(nr, (unsigned long *)bg->bg_bitmap); + else + ret = 1; + spin_unlock(&jh->b_state_lock); + jbd2_journal_put_journal_head(jh); return ret; } _