From patchwork Thu Jan 20 12:43:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gautham Ananthakrishna X-Patchwork-Id: 12718585 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 aib29ajc247.phx1.oracleemaildelivery.com (aib29ajc247.phx1.oracleemaildelivery.com [192.29.103.247]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4F91BC433EF for ; Thu, 20 Jan 2022 12:44:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=oss-phx-1109; d=oss.oracle.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=RbJSbl3gsxqLSjO8WQfPeioUJom36sKcGcMS9uujEA4=; b=MaMpAM0ttLTI3S6C1xPqkCHpeW9Z83CwXAa1v1gKpIq+BgT3AjD1i8U35Ko7MeKhasqxokhzJVou ch2I3oJhQT4nC+tyI9+DGpjf0HJEymJUE/Z+wU63FGyomRSPgmZWs3JNzxjPcNqn8eN8e2e1n3tg F00B7HASI2StWzvVfheUHexJP1udFA9YAFLeYe4Iuc8VD5fYCBqwYgmooch2NF5NtQYgn57l99ui Vs8Ciw447K/2Dl2dq0NEzirBsE8SC+dl/ZmQeLXArzEt9aZS/iu9OPSY4b/vguyalugovc/hOgAm H0c7bLx4neytFv9YYM6ik0k0y17F6rJReR7I0w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=prod-phx-20191217; d=phx1.rp.oracleemaildelivery.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=RbJSbl3gsxqLSjO8WQfPeioUJom36sKcGcMS9uujEA4=; b=rzbgGaA4Jz78yitfjpmPfArWYWkbaCmsJ0J0l8/fpu5GX805TyyHpge0eXJQjX669s0pBf5+vtws gzKIFoRpVNnwYbA8j9SC2C05xTZGAsYRoafHha0UGTt+X/kLlZTSLT7+qitThZDxQPXAnbBMAwRf VTn5+MSojJsaqn3KfDVVklewGbo+4oxjbPvqT1yGOW5+pR6vhyDDMDn6Y/RroXME3naWvh7UUEsm iRsjP66DM+BETjJs+slF5tge5p1/oPdib7LUF0MBJXeXzSA+GWp4buGbjAxYe8nYdQKJxv1KW6mk 1pZ3nAYb0IShe63qojgZzNBjYDSbMmY7XyNidQ== Received: by omta-ad1-fd3-102-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20220104 64bit (built Jan 4 2022)) with ESMTPS id <0R6000OPAE1EDS40@omta-ad1-fd3-102-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Thu, 20 Jan 2022 12:44:02 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : mime-version : content-type : content-transfer-encoding; s=corp-2021-07-09; bh=5EVQk7DeK5O+ezHFVJ38s6qRGdAmJwr5OBn9+f8tBMQ=; b=nB5P2/W/L0W+WhhKZk+zMI2ao3nnPwATNAdHL6mxHOALFzFXFNZhdApscwi6CENCsXUE qq+jwEfFamgea/qYBEhPGCdZZYpmMBnP/XdKeDq+bdkPGeJk1mShLJhkhngU//sXQFKF Z3TevN8Y7PFuQr6ZmJuGiohbyUqIaKu+FqN2bTrH51GhhF3HseB4LmLk5BFeOsEVjarp BXe5KQOYjcjxXIkAj8XXg3ekjoYC1cOc53oOn5UQ4N0Hj+g5DHSxdid+xZUkL6GXJoSw MJy5jyM5vz7PS/iBF5h4uF5UyoC/rg0OsMEBZT/FFCMbRRDMWtMXPOxrD5A6xzfq/MFh Mw== Authentication-results: aserp3010.oracle.com; spf=softfail smtp.mailfrom=gautham.ananthakrishna@oracle.com; dmarc=none header.from=oracle.com To: ocfs2-devel@oss.oracle.com, joseph.qi@linux.alibaba.com Date: Thu, 20 Jan 2022 18:13:47 +0530 Message-id: <1642682627-12041-1-git-send-email-gautham.ananthakrishna@oracle.com> X-Mailer: git-send-email 1.8.3.1 MIME-version: 1.0 Cc: rajesh.sivaramasubramaniom@oracle.com, gautham.ananthakrishna@oracle.com Subject: [Ocfs2-devel] [PATCHC RFC V2 1/1] ocfs2: fix a deadlock when commit trans X-BeenThere: ocfs2-devel@oss.oracle.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Gautham Ananthakrishna via Ocfs2-devel Reply-to: Gautham Ananthakrishna Content-type: text/plain; charset="utf-8" Content-transfer-encoding: base64 Errors-to: ocfs2-devel-bounces@oss.oracle.com X-Proofpoint-GUID: KwboEhAd9ELOvYC6v_3b0V8k408qicnh X-Proofpoint-ORIG-GUID: KwboEhAd9ELOvYC6v_3b0V8k408qicnh Reporting-Meta: AAFPx5IXvphoQu/gubm9UV106jEMTctUc/RP6c8vH4LqDT6CCLMlG34h31zYIu+6 HOm7UrnDfBz3wyySG7BnZL85o5hxgq7CIkTEL4GU/RDQxTI9cr6dvlF5XyEuprKZ 5JgtUR6vEtgIfTmoPcdgbMvWmT8J2oEIzBB5nKyJK1FrJI3PfUgQsdMEl2D1UK9U yIUKWnfrJLXo8dEWYfjqg630mkLd4gBvDkZulw3p4dmsNzRqvnDNxdrcCIG6oTx/ vTMHrk6gt2HZkOWHR0YuUdwmM8aIaWnAX6J4xPscwuz49iU8yIx8cz7C8QuNZD01 L826USEFqYqFl3BKWKrDHfaZfx4rjitM1qSnZ8wO1v8mBHidekQEVt2Lz4JiLPao WzSc5nDb2G3OSQFg/y5+gdnkE0D3SB0n3ebHhdP6T7fJ6KYgVlWqYJDMkleJok+k kbWjZSgOZ44NzDSmwg1YMUgPhS94nZfKESCoJf/B/FJmfS5wcibOlq4ksfhBjd01 IOm/+rKunvCaqjxch9O5MmZoH6dvqrOakCBCaF8VS8Y= commit 6f1b228529ae49b0f85ab89bcdb6c365df401558 caused a deadlock which was uncovered by our internal tests. The deadlock is as foollows: Task 1: A1) jbd2_journal_commit_transaction() A2) spin_lock(&jh->b_state_lock); A3) __jbd2_journal_remove_checkpoint() A4) jbd2_journal_put_journal_head() A5) jbd_lock_bh_journal_head() Task 2: B1) ocfs2_test_bg_bit_allocatable() B2) jbd_lock_bh_journal_head() B3) spin_lock(&jh->b_state_lock); A1->A2->A3->A4->B1->B2->B3(blocked)->A5(blocked) Now cause process 2 has the jbd lock, it doesn’t let process 1 to continue after A5. Process 2 now is waiting for b_state_lock to be released by process 1. This patch resolves the deadlock. Signed-off-by: Gautham Ananthakrishna --- fs/ocfs2/suballoc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index 481017e..a618970 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c @@ -1259,9 +1259,8 @@ static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh, if (!buffer_jbd(bg_bh)) return 1; - jbd_lock_bh_journal_head(bg_bh); - if (buffer_jbd(bg_bh)) { - jh = bh2jh(bg_bh); + jh = jbd2_journal_grab_journal_head(bg_bh); + if (jh) { spin_lock(&jh->b_state_lock); bg = (struct ocfs2_group_desc *) jh->b_committed_data; if (bg) @@ -1269,8 +1268,8 @@ static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh, else ret = 1; spin_unlock(&jh->b_state_lock); + jbd2_journal_put_journal_head(bg_bh); } - jbd_unlock_bh_journal_head(bg_bh); return ret; }